CMake 添加外部源文件

2024-08-10 10:39:00 浏览数 (2)

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)

0 人点赞