Cmake笔记总结

  • Post author:
  • Post category:其他


  1. 单个源文件
  2. 同一目录,多个源文件
  3. 多个目录,多个源文件
  4. 几个重要的指令(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篇资料,已忘记链接



版权声明:本文为weixin_39908946原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。