下面是一个示例项目结构以及如何使用 cmake 创建一个包含子目录的 C++ 项目。
假设你的项目结构如下:
MyProject/
├── CMakeLists.txt
├── main.cpp
├── include/
│ └── mylib.h
└── src/
├── CMakeLists.txt
└── mylib.cpp
1. 顶层CMakeLists.txt
在项目的根目录下创建 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.10)
# 设置项目名称和版本
project(MyProject VERSION 1.0)
# 指定 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 包含头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)
# 添加子目录
add_subdirectory(src)
# 添加可执行文件
add_executable(MyProject main.cpp)
# 链接库
target_link_libraries(MyProject PRIVATE MyLib)
2.main.cpp
在项目的根目录下创建 main.cpp 文件:
#include <iostream>
#include "mylib.h"
int main() {
std::cout << "Hello, World!" << std::endl;
mylib_function();
return 0;
}
3. 头文件mylib.h
在 include 目录下创建 mylib.h 文件:
#ifndef MYLIB_H
#define MYLIB_H
void mylib_function();
#endif // MYLIB_H
4. 源文件mylib.cpp
在 src 目录下创建 mylib.cpp 文件:
#include <iostream>
#include "mylib.h"
void mylib_function() {
std::cout << "This is a function from mylib." << std::endl;
}
5. 子目录CMakeLists.txt
在 src 目录下创建 CMakeLists.txt 文件:
# 添加库
add_library(MyLib mylib.cpp)
# 包含头文件目录
target_include_directories(MyLib PUBLIC ${PROJECT_SOURCE_DIR}/include)
构建项目
- 在项目根目录下创建一个 build 目录:
mkdir build
cd build
- 运行 cmake 生成构建文件:
cmake ..
- 编译项目:
cmake --build .
- 运行生成的可执行文件:
./MyProject
输出应为:
Hello, World!
This is a function from mylib.
通过这种方式,你可以在 CMake 中组织和管理一个包含多个子目录的 C++ 项目。