不同的环境有不同的工程构建方法,例如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>)的作用:加入到指定的dir中,并执行cmake .命令,如果dir中不含有CMakeLists.txt文件,会发生执行错误; -
target_link_libraries(<target> ... <item> ...):设置target的动态链接库;
cmake变量设置
-
set(<variable> <value>):设置variable的值为value,value也可以使用变量;另外,变量也可以在执行 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>)将 dir 目录下的所有源文件都保存在变量variable中,以空格分隔;
cmake 辅助功能
-
message(<mode> <information>):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_DIR和CMAKE_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操作时,会显示进入目录和离开目录的信息;












网友评论