cmake 常用知识点

不同的环境有不同的工程构建方法,例如qt用qmake语法,gnu用make语法,微软有nmake等等,对于不同的Make工具,我们需要编写用不同的语法进行编写。而cmake就是对语法进行抽象统一。cmake 的使用为:编写CMakeLists.txt文件 → 执行 cmake,生成对应的Make文件 → 执行make

函数篇

编译参数设置

  • add_definitions(-std=c++14) 的作用:设置c++编译器的语言版本号,有的语法是在c++14中新加的,则如果用之前的版本就会出现编译错误;

  • include_directories(directory1 directory2 ...):设置头文件所在的目录;

  • link_directories(directory1 directory2 ...):设置库文件夹;

目标生成

  • add_executable(目标名 文件1 文件2 ...) 将文件1、文件2、... 一起编译成一个可执行文件;

  • add_library(目标名 文件1 文件2 ...) 将 文件1、文件2、... 进行静态编译,并合并为一个 lib目标名.a 的静态文件库;如果是 add_library(目标名 SHARED 文件1 文件2 ...) 将会生成动态链接库;

  • add_subdirectory(

    ) 的作用:加入到指定的dir中,并执行 cmake . 命令,如果dir中不含有 CMakeLists.txt 文件,会发生执行错误;

  • target_link_libraries( ... ...):设置 target 的动态链接库;

cmake变量设置

  • set( ):设置 variable 的值为 valuevalue 也可以使用变量;另外,变量也可以在执行 cmake 时设置,例如:cmake -DCMAKE_X=abc . 等价于在 CMakeLists.txt 中添加了语句 set(CMAKE_X abc)

  • file(GLOB_RECURSE source_files a/*.cpp b/*.h):递归查找 a 下的cpp文件和b下的h文件,将找到的文件存在变量source_files下;

  • aux_source_directory(

    ) 将 dir 目录下的所有源文件都保存在变量 variable 中,以空格分隔;

cmake 辅助功能

  • message( )mode 表示message的类型,有:STATUS/ WARNING/ AUTHOR_WARNING/ SEND_ERROR/ FATAL_ERROR/ DEPRECATION,该打印操作是在执行cmake时执行,而不是执行make时执行;

变量篇

  • MAKE 变量:在makefile中,变量 $(MAKE) 是当前环境中make路径,可能是make、qmake、pmake、nmake。

  • CMAKE_SOURCE_DIR:该变量表示第一个执行cmake的 CMakeLists.txt 所在的文件夹,而不是通过 add_subdirectory中的文件夹地址;

  • CMAKE_BINARY_DIR:该变量表示执行cmake时所在的文件夹,通常来说,如果执行 cmake .,则 CMAKE_SOURCE_DIRCMAKE_BINARY_DIR 相同;例如我们的 CMakeLists.txt 文件在 a 文件夹下,我们在 a/b 文件夹下执行 cmake ..,那么 CMAKE_SOURCE_DIR 就是 a,而 CMAKE_BINARY_DIR 就是 a/b;

  • CMAKE_BUILD_TYPE 变量可改变编译组态,预设的 CMAKE_BUILD_TYPE 是None,支持:Debug、Release、RelWithDebInfo、MinSizeRel;

  • CMAKE_ARCHIVE_OUTPUT_DIRECTORY/ CMAKE_LIBRARY_OUTPUT_DIRECTORY/ LIBRARY_OUTPUT_PATH/ CMAKE_RUNTIME_OUTPUT_DIRECTORY :见文章 https://www.jianshu.com/p/599550afd28d;

make 选项

  • --print-directory:等价于 -w,在makefile中执行cd操作时,会显示进入目录和离开目录的信息;

你可能感兴趣的:(cmake 常用知识点)