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>])

如果指定的变量发生改变,将会输出一条消息。如果指定了命令,命令将会执行。

 

posted @ 2017-07-07 11:28  Jason886  阅读(1697)  评论(0)    收藏  举报