- 单个源文件
- 同一目录,多个源文件
- 多个目录,多个源文件
- 几个重要的指令(find_package(),include_directories(),link_directories(),target_link_libraries(),target_include_directories())
1 单个源文件
CMakeLists.txt 文件:
2 同一目录,多个源文件
工程目录:
CMakeLists.txt 文件:
或使用 aux_source_directory 命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。
可以修改 CMakeLists.txt 如下:
3 多个目录,多个源文件
工程目录:
根目录中的 CMakeLists.txt :
子目录math中的 CMakeLists.txt:
4.几个重要的指令()
set()
举例1,set(libs “¥{CMAKE_SOURCE_DIR}/src/main/jnilibs”)
这个命令完成了这么一件事情:
定义了一个变量libs,并且变量的值为${CMAKE_SOURCE_DIR}/src/main/jnilibs,其中CMAKE_SOURCE_DIR 是一个cmake内置变量,指定了CMakeLists.txt所在的目录
1 find_package()
如下find_package(A),需要在环境变量的索引中找到FindA.cmake文件
CMakeLists.txt :
FindA.cmake
如下是导入外部文件+链接库
1.1 include_directories()
include_directories()的影响范围最大,可为CMakelists.txt后的所有项目添加头文件目录
一般写在最外层CMakelists.txt中影响全局
1.2.link_directories(): 添加需要链接的库文件目录
如link_directories(D:/camera_driver/SDK/lib)
1.3 target_link_libraries():将目标文件与库文件进行链接
target_link_libraries(project_name Astra.lib astra_core.lib astra_core_api.lib )
project_name为project的名称,Astra.lib / astra_core.lib / astra_core_api.lib 三个库文件来自2中link_directories(D:/camera_driver/SDK/lib)
2 target_include_directories()
target_include_directories()的影响范围可以自定义。如加关键子PRIVATE或这PUBLIC。
一般引用库路径使用这个命令,作为外部依赖项引入进来,target是自己项目生成的lib。
3 add_executable()
add_executable( )中添加的引用路径一般是当前目录下的源文件对应的头文件。是生成项目时引入的头文件。 这种方式一般用于自己写的或某项目需要的头文件,这种方式需要加添加文件名字,而非头文件目录
附:参考3篇资料,已忘记链接