1.命令
命令不区分大小写(参数会区分大小写),命令由命令、参数列表组成,参数之间使用空格进行分隔。
使用一对双引号包括的字符串认为是一个参数。
命令可以是一个内置命令(例如:project,add_executable等),也可以是一个用户定义的宏(macro)或者函数(function)。
常用命令:
1.1 list
1.2 include
从文件或模块加载并运行CMake代码
1.3 option
CMake中的option用于控制编译流程,相当于C语言中的宏条件编译。options基本格式如下:
option(<variable> "<help_text>" [value])
variable
:定义选项名称
help_text
:说明选项的含义
value
:定义选项默认状态,一般是OFF或者ON,除去ON之外,其他所有值都为认为是OFF。
1.4 message
message()函数用于想终端输出信息。
message( [STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)
1.5 file
CMake中的file命令用于文件操作,比如读写文件,文件系统操作,路径转换,文件传输等,其文件格式如下:
子命令:读
file(READ <filename> <out-var> [...])
file(STRINGS <filename> <out-var> [...])
file(<HASH> <filename> <out-var>)
file(TIMESTAMP <filename> <out-var> [...])
file(GET_RUNTIME_DEPENDENCIES [...])
子命令:写
file({WRITE | APPEND} <filename> <content>...)
file({TOUCH | TOUCH_NOCREATE} [<file>...])
file(GENERATE OUTPUT <output-file> [...])
file(CONFIGURE OUTPUT <output-file> CONTENT <content> [...])
子命令:文件系统
file({GLOB | GLOB_RECURSE} <out-var> [...] [<globbing-expr>...])
file(MAKE_DIRECTORY [<dir>...])
file({REMOVE | REMOVE_RECURSE } [<files>...])
file(RENAME <oldname> <newname> [...])
file(COPY_FILE <oldname> <newname> [...])
file({COPY | INSTALL} <file>... DESTINATION <dir> [...])
file(SIZE <filename> <out-var>)
file(READ_SYMLINK <linkname> <out-var>)
file(CREATE_LINK <original> <linkname> [...])
file(CHMOD <files>... <directories>... PERMISSIONS <permissions>... [...])
file(CHMOD_RECURSE <files>... <directories>... PERMISSIONS <permissions>... [...])
子命令:路径转换
file(REAL_PATH <path> <out-var> [BASE_DIRECTORY <dir>] [EXPAND_TILDE])
file(RELATIVE_PATH <out-var> <directory> <file>)
file({TO_CMAKE_PATH | TO_NATIVE_PATH} <path> <out-var>)
子命令:传输
file(DOWNLOAD <url> [<file>] [...])
file(UPLOAD <file> <url> [...])
子命令:锁
file(LOCK <path> [...])
子命令:归档
file(ARCHIVE_CREATE OUTPUT <archive> PATHS <paths>... [...])
file(ARCHIVE_EXTRACT INPUT <archive> [...])
1.6 execute_process
执行一个或多个子进程,使用execute_process调用shell命令或脚本
2.数据类型
CMake的基本数据类型是字符串,一组字符串在一起称为列表(list)
# 通过 set 命令构建一个 listVAR
set(VAR a b c)
${VariableName}
来访问名字为VariableName
的变量的值。需要注意的是,即使在字符串中也可以使用${VariableName}
来访问名字为VariableName
的变量的值。需要注意的是,即使在字符串中也可以使用。
3.CMake中常用预定义变量
PROJECT_SOURCE_DIR
:工程根目录
PROJECT_BINARY_DIR
:运⾏cmake命令的⽬录。建议定义为${PROJECT_SOURCE_DIR}/build下
CMAKE_INCLUDE_PATH
:环境变量
CMAKE_LIBRARY_PATH
:环境变量
CMAKE_CURRENT_SOURCE_DIR
:当前处理的CMakeLists.txt⽂件所在路径;
CMAKE_CURRENT_BINARY_DIR
:target编译⽬录;
CMAKE_CURRENT_LIST_FILE
:输出调⽤该变量的CMakeLists.txt的完整路径;
CMAKE_CURRENT_LIST_LINE
:输出该变量所在的⾏;
CMAKE_MODULE_PATH
:定义⾃⼰的cmake模块所在路径;
EXECUTABLE_OUTPUT_PATH
:重新定义⽬标⼆进制可执⾏⽂件的存放位置;
LIBRARY_OUTPUT_PATH
:重新定义⽬标链接库⽂件的存放位置;
PROJECT_NAME
:返回由PROJECT指令定义的项⽬名称;
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS
:⽤来控制IF…ELSE…语句的书写⽅式;
开关选项变量:
BUILD_SHARED_LIBS
控制默认的库编译⽅式。注:如果未进⾏设置,使⽤ADD_LIBRARY时⼜没有指定库类型,默认编译⽣成的库都是静态库。
CMAKE_C_FLAGS
设置C编译选项
CMAKE_CXX_FLAGS
设置C++编译选项
4.CMake常用语法
cmake_minimum_required (VERSION 2.6)
project(WhiteBalance)
在外部构建⽅法下,PROJECT_SOURCE_DIR
指向⽬录与内部构建相同,为CMakeLists.txt所在根⽬录;⽽PROJECT_BINARY_DIR
不同,它指向CMakeLists.txt所在根⽬录下的build⽬录。
mkdir build
cd ./build
cmake ../
make
set (CMAKE_INSTALL_PREFIX /usr/local)
ADD_SUB_DIRECTORY
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
这个指令⽤于向当前⼯程添加存放源⽂件的⼦⽬录,并可以指定中间⼆进制和⽬标⼆进制存放的位置。EXCLUDE_FROM_ALL 参数的含义是将这个⽬录从编译过程中排除。⽐如,⼯程有时候存在example,可能就需要⼯程构建完成后,再进⼊example⽬录单独进⾏构建。
5.常用函数
1.find_path 从默认⽬录和指定⽬录查找头⽂件,并返回结果
2.find_library 从默认⽬录和指定⽬录查找库⽂件,并返回结果
6.输出所有定义的变量
get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}")
endforeach()