0 引言
大量开源库需要通过cmake编译后使用,了解cmake的基本指令以及CMakeLists.txt的写法非常重要,其基础是了解编译原理。另外,为了对cmake编译的代码进行调试,需要了解CMakeList.txt的写法。本文将对这些关键问题进行探讨,并记录一些关键点。
参考了如下链接。
https://blog.csdn.net/wzzfeitian/article/details/40963457/ # cmake使用示例与整理总结
https://cmake.org/cmake/help/v3.3/command/target_link_libraries.html # cmake official documentation
# cmake相关的教程
https://tuannguyen68.gitbooks.io/learning-cmake-a-beginner-s-guide/content/chap1/chap1.html
1 cmake编译原理
cmake通过指定源文件、外部include文件、 静态链接库(.a/.lib)文件、动态链接库(.so/.dll)文件的路径,以及生成文件的路径,将整个程序有序地组织起来,最终达到生成可执行程序的目的。
2 cmake commands(常用)
(1)cmake中的指令对大小写不敏感。 (2)PROJECT(project):工程名,一般采用最上层文件夹名 (3)ADD_SUBDIRECTORY(add_subdirectory):附加目录名,一般为src的目录,在文件比较多的时候采用 (4)LINK_DIRECTORIES (link_directories):静态链接库目录,供linker(链接器)使用 (5)ADD_EXECUTABLE (add_executable):可执行文件 (6)INCLUDE_DIRECTORIES(include_directories): .h头文件 (7)TARGET_LINK_LIBRARIES(target_link_libraries): .so文件,格式是 target_link_libraries(可执行文件名 链接库地址及文件) 写法为:以libboost_system.so.1.58.o 为例 “-lboost_system”
3 cmake预定义变量
$PROJECT_SOURCE_DIR$ : 工程的根目录
$PROJECT_BINARY_DIR$ : 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build
4 cmake的CMakeLists.txt语法
常用变量的意义解释都有,链接如下。
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables
5 cmake参数运用
(1)区分debug和release的方法:
点击Add Entry添加 Name: CMAKE_DEBUG_POSTFIX 、Type: STRING 、Value:-gd、Description:空