cmake命令之脚本命令
include
加载并运行另一个文件或模块中的CMake代码。
include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR>] [NO_POLICY_SCOPE])
set
设置变量的值。
设置普通变量:
set(<variable> <value>... [PARENT_SCOPE])
设置Cache Entry:
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
设置环境变量:
set(ENV{<variable>} <value>...)
unset
删除变量,变量将变成未定义。
unset(<variable> [CACHE | PARENT_SCOPE])
删除环境变量:
unset(ENV{LD_LIBRARY_PATH}) ## 删除环境变量LD_LIBRARY_PATH
message
message([<mode>] "message to display" ...) ## 输出信息
<mode>决定了消息类型:
(none) = Important information STATUS = Incidental information WARNING = CMake Warning, continue processing AUTHOR_WARNING = CMake Warning (dev), continue processing SEND_ERROR = CMake Error, continue processing, but skip generation FATAL_ERROR = CMake Error, stop processing and generation DEPRECATION = CMake Deprecation Error or Warning if variable CMAKE_ERROR_DEPRECATED or CMAKE_WARN_DEPRECATED is enabled, respectively, else no message.
if-elseif-else-endif
if(expression) # then section. COMMAND1(ARGS ...) COMMAND2(ARGS ...) #... elseif(expression2) # elseif section. COMMAND1(ARGS ...) COMMAND2(ARGS ...) #... else(expression) # else section. COMMAND1(ARGS ...) COMMAND2(ARGS ...) #... endif(expression)
foreach
foreach(loop_var arg1 arg2 ...) ## 从一个参数列表产生循环
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
foreach(loop_var RANGE total) ## 从0到total每次递增1循环
foreach(loop_var RANGE start stop [step]) ##从start往stop递增,步长step
foreach(loop_var IN [LISTS [list1 [...]]]
[ITEMS [item1 [...]]])
while
while(condition) COMMAND1(ARGS ...) COMMAND2(ARGS ...) ... endwhile(condition)
break,continue
break() ## 退出循环
continue() ## 停止当前循环,进入下一轮循环
function
function(<name> [arg1 [arg2 [arg3 ...]]]) COMMAND1(ARGS ...) COMMAND2(ARGS ...) ... endfunction(<name>)
macro
macro(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endmacro(<name>)
string
FIND
## 在<string>中查找子串<substring>,子串位置通过<variable>返回,-1表示未找到。REVERZE,反向查找。 string(FIND <string> <substring> <output variable> [REVERSE])
REPLACE
## 用replace_string 替换所有的input中的match_string,结果放入output. string(REPLACE <match_string> <replace_string> <output variable> <input> [<input>...])
execute_process
执行一个或多个子进程
execute_process(COMMAND <cmd1> [args1...]]
[COMMAND <cmd2> [args2...] [...]]
[WORKING_DIRECTORY <directory>]
[TIMEOUT <seconds>]
[RESULT_VARIABLE <variable>]
[OUTPUT_VARIABLE <variable>]
[ERROR_VARIABLE <variable>]
[INPUT_FILE <file>]
[OUTPUT_FILE <file>]
[ERROR_FILE <file>]
[OUTPUT_QUIET]
[ERROR_QUIET]
[OUTPUT_STRIP_TRAILING_WHITESPACE]
[ERROR_STRIP_TRAILING_WHITESPACE]
[ENCODING <name>])
查询cmake当前运行的系统的信息
cmake_host_system_information(RESULT <variable> QUERY <key> ...)
可以一次提供多个Key,得到的信息放入variable中。
key列表:
NUMBER_OF_LOGICAL_CORES = 逻辑内核数. NUMBER_OF_PHYSICAL_CORES = 物理内核数. HOSTNAME = 主机名称. FQDN = Fully qualified domain name. TOTAL_VIRTUAL_MEMORY = 虚内内存总数,单位MB. AVAILABLE_VIRTUAL_MEMORY = 可用虚内内存,单位MB. TOTAL_PHYSICAL_MEMORY = 物理内存总数,单位MB. AVAILABLE_PHYSICAL_MEMORY = 可用物理内存,单位MB.
设置cmake的最低版本
cmake_minimum_required(VERSION major.minor[.patch[.tweak]] [FATAL_ERROR])
如果当前cmake的版本比设置的低,将会停止并且报错。
注意:在最顶层的CMakeLists.txt文件中调用cmake_minimum_required()命令。
在一个函数中调用cmake_minimum_required()将会对函数起到限制作用。
解析输入参数
## 可用于函数或宏
cmake_parse_arguments(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
## 只用于函数 cmake_parse_arguments(PARSE_ARGV N <prefix> <options> <one_value_keywords> <multi_value_keywords>)
在函数或宏中使用,用于解析输入参数。参数解析后定了一些变量,存放参数指定的选项。
<options>包含不需要后接值的选项。
<one_value_keywords>包含只可后接一个值的选项。
<multi_value_keywords>包含可后接多个值的多项。
cmake_parse_arguments将会定义一系列变量,名称为<prefix>_keyword,变量存储了从参数列表中解析到的值,对于<options>变量的值是TRUE或FALSE。
所有未解析到的参数被收集到<prefix>_UNPARSED_ARGUMENTS中。
一个my_install的例子:
function(MY_INSTALL) set(options OPTIONAL FAST) set(oneValueArgs DESTINATION RENAME) set(multiValueArgs TARGETS CONFIGURATIONS) cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # ...
调用my_install:
my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub)
调用my_install后,以下变量被设置:
MY_INSTALL_OPTIONAL = TRUE MY_INSTALL_FAST = FALSE (was not used in call to my_install) MY_INSTALL_DESTINATION = "bin" MY_INSTALL_RENAME = "" (was not used) MY_INSTALL_TARGETS = "foo;bar" MY_INSTALL_CONFIGURATIONS = "" (was not used) MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (nothing expected after "OPTIONAL")
监控变量变化
variable_watch(<variable name> [<command to execute>])
如果指定的变量发生改变,将会输出一条消息。如果指定了命令,命令将会执行。

浙公网安备 33010602011771号