CMake 添加外部源文件
代码语言:tree复制项目文件树
CPP11ThreadLearn
├── CMakeLists.txt------------顶级CMake文件
├── CPP11ThreadLearn----------项目文件夹1
│ ├── CMakeLists.txt
│ ├── CPP11ThreadLearn.cpp
│ ├── CPP11ThreadLearn.h
│ ├── simple.cpp
│ └── simple.h
├── CPP11ThreadPool-----------项目文件夹2
│ ├── CMakeLists.txt
│ ├── main.cpp
│ ├── test.cpp
│ └── test.h
└── Tools---------------------工具文件夹
├── tools.cpp
└── tools.h
需求:我想要在项目1,2中都使用 Tools 下的文件.h .cpp
- 不编译成静态库或动态库
- 项目中 #include"tools.h" 即可以使用,像是在同一目录下的效果
- 较好的维护性 不要在每个 CMakeLists.txt 中添加大量代码
解决方案:
思路:通过 CMake 配置文件加入头文件和源文件
第一步:定义函数
代码语言:cmake复制# 顶级CMake文件中添加函数
# 添加外部源码库(单层文件结构)
function(add_path_to_target target path) # 函数名 编译目标 添加路径
aux_source_directory(${path} var)
target_include_directories(${target} PUBLIC ${path})
target_sources(${target} PRIVATE ${var})
endfunction()
第二步:使用函数
代码语言:cmake复制# 在项目 1 or 2 下的 CMakeLists.txt 中使用该函数
# CPP11ThreadPool/CMakeLists.txt 内容
cmake_minimum_required (VERSION 3.8)
# 将源代码添加到此项目的可执行文件。
add_executable (CPP11ThreadPool "main.cpp" "test.h" "test.cpp")
# 参数1 项目目标名 参数2 相对路径
add_path_to_target(CPP11ThreadPool ../Tools)