给到我平时使用的一个较为合理的CPP项目文件数,文末附带shell脚本可快速初始化你的工程
1.典型 C++ 工程文件树结构
MyProject/
├── CMakeLists.txt # 主 CMake 配置文件
├── src/ # 源代码目录
│ ├── main.cpp # 主程序入口
│ ├── module1.cpp # 其他源文件
│ ├── module1.h # 头文件
│ └── subdirectory/ # 子模块目录
│ ├── module2.cpp
│ └── module2.h
├── include/ # 公共头文件目录
│ └── mylib.h
├── lib/ # 外部或自定义库目录
│ └── mylib.a # 静态库(可选)
├── tests/ # 测试代码目录
│ ├── test_main.cpp
│ └── CMakeLists.txt # 测试的 CMake 配置文件
├── build/ # 构建目录(运行 CMake 和 make)
├── docs/ # 文档目录(可选)
│ └── README.md
└── scripts/ # 脚本目录(可选)
└── run_tests.sh
2.各部分说明
2.1 根目录 (MyProject/)
CMakeLists.txt:主 CMake 配置文件,定义项目全局设置、源文件、库依赖等。
其他可选文件:.gitignore、项目配置文件等。
2.2 src/ 目录
存放所有源代码文件(.cpp)和私有头文件(.h)。
可以包含子目录(如 subdirectory/)来组织模块化代码。
例如:
// src/main.cpp
#include "module1.h"
#include <iostream>
int main() {
std::cout << "Hello, Project!" << std::endl;
module1_function();
return 0;
}
// src/module1.cpp
#include "module1.h"
void module1_function() {
std::cout << "Module 1 function" << std::endl;
}
// src/module1.h
#ifndef MODULE1_H
#define MODULE1_H
void module1_function();
#endif
2.3 include/ 目录
存放供外部使用的公共头文件(例如库接口)。
示例:
// include/mylib.h
#ifndef MYLIB_H
#define MYLIB_H
void mylib_function();
#endif
2.4 lib/ 目录
存放静态库(.a)或动态库(.so)文件。
可包含第三方库或项目生成的库。
2.5 tests/ 目录
存放测试代码,通常使用测试框架(如 Google Test)。
包含独立的 CMakeLists.txt 用于配置测试。
示例:
// tests/test_main.cpp
#include <gtest/gtest.h>
TEST(MyTest, BasicTest) {
ASSERT_EQ(1, 1);
}
2.6 build/ 目录
临时目录,用于存放 CMake 生成的构建文件和编译输出的可执行文件。
通常为空,运行 cmake .. 和 make 后会生成内容。
2.7 docs/ 目录(可选)
存放项目文档,如 README.md、API 文档等。
2.8 scripts/ 目录(可选)
存放自动化脚本,如构建、测试或部署脚本。
3.示例 CMakeLists.txt 配置
以下是一个与上述文件树匹配的 CMakeLists.txt 示例:
# MyProject/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyProject LANGUAGES CXX)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 添加 include 目录
include_directories(${CMAKE_SOURCE_DIR}/include)
# 收集所有源文件
file(GLOB_RECURSIVE SOURCES src/*.cpp)
# 生成可执行文件
add_executable(my_program ${SOURCES})
# 链接外部库(如果有)
# find_library(MYLIB mylib HINTS ${CMAKE_SOURCE_DIR}/lib)
# target_link_libraries(my_program PRIVATE ${MYLIB})
# 添加测试(如果需要)
enable_testing()
find_package(GTest REQUIRED)
add_executable(run_tests tests/test_main.cpp)
target_link_libraries(run_tests GTest::GTest GTest::Main)
add_test(NAME MyTests COMMAND run_tests)
快速创建Shell脚本
#!/bin/bash
touch CMakeLists.txt
mkdir src
touch src/main.cpp
mkdir src/subdirectory/
mkdir include/
mkdir lib/
mkdir tests/
mkdir doc
touch doc/README.md
mkdir scripts/
mkdir build/
评论区