cmakelist.txt之命令行(一)
脚本命令(Scripting Commands)
break
中断一个闭环的 foreach 或者 while 循环
break()
continue
跳转到一个闭环的 foreach 或者 while 循环的最开始部分
continue()
cmake_host_system_information
查询运行cmake的主机系统的指定信息。可以一次性查询多个,结果存储在中。
cmake_host_system_information(RESULT <variable> QUERY <key> ...)
Key | Description |
---|---|
NUMBER_OF_LOGICAL_CORES | Number of logical cores |
NUMBER_OF_PHYSICAL_CORES | Number of physical cores |
HOSTNAME | Hostname |
FQDN | Fully qualified domain name |
TOTAL_VIRTUAL_MEMORY | Total virtual memory in megabytes |
AVAILABLE_VIRTUAL_MEMORY | Available virtual memory in megabytes |
TOTAL_PHYSICAL_MEMORY | Total physical memory in megabytes |
AVAILABLE_PHYSICAL_MEMORY | Available physical memory in megabytes |
IS_64BIT | One if processor is 64Bit |
HAS_FPU | One if processor has floating point unit |
HAS_MMX | One if processor supports MMX instructions |
HAS_MMX_PLUS | One if porcessor supports Ext. MMX instructions |
HAS_SSE | One if porcessor supports SSE instructions |
HAS_SSE2 | One if porcessor supports SSE2 instructions |
HAS_SSE_FP | One if porcessor supports SSE FP instructions |
HAS_SSE_MMX | One if porcessor supports SSE MMX instructions |
HAS_AMD_3DNOW | One if porcessor supports 3DNow instructions |
HAS_AMD_3DNOW_PLUS | One if porcessor supports 3DNow+ instructions |
HAS_IA64 | One if IA64 processor emulating x86 |
HAS_SERIAL_NUMBER | One if processor has serial number |
PROCESSOR_SERIAL_NUMBER | Processor serial number |
PROCESSOR_NAME Human | readable processor name |
PROCESSOR_DESCRIPTION | Human readable full processor description |
OS_NAME | See CMAKE_HOST_SYSTEM_NAME |
OS_RELEASE | The OS sub-type e.g. on Windows Professional |
OS_VERSION | The OS build ID |
OS_PLATFORM | See CMAKE_HOST_SYSTEM_PROCESSOR |
cmake_minimum_required
设置工程所需的最低cmake版本要求。
cmake_minimum_required(VERSION major.minor[.patch[.tweak]] [FATAL_ERROR])
cmake_policy(VERSION major[.minor[.patch[.tweak]]])
cmake_policy(VERSION 2.4)
cmake_policy
设置cmake按照满足需求的更新策略。
cmake_policy(VERSION major[.minor[.patch[.tweak]]])
cmake_policy(SET CMP<NNNN> NEW)
cmake_policy(SET CMP<NNNN> OLD)
cmake_policy(GET CMP<NNNN> <variable>)
cmake_policy(PUSH)
cmake_policy(POP)
cmake_parse_arguments
该命令尝试使用宏和函数来分割给定的参数。它处理这些参数并定义了一组变量来保存相对应的选项值。
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>)
- configure_file
从其他地方拷贝文件并更改其内容
configure_file(<input> <output>
[COPYONLY] [ESCAPE_QUOTES] [@ONLY]
[NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
if
条件语句
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)
endif
结束if语句块
endif(expression)
elseif
开始一个if语句块中的嵌套if语句块
elseif(expression)
else
开始一个if语句块中的else语句块
else(expression)
foreach
针对列表中的每个值执行一组命令
foreach(loop_var arg1 arg2 ...)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
endforeach
结束foreach语句块
endforeach(expression)
while
当条件为真时执行一组命令
while(condition)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endwhile(condition)
endwhile
结束while语句块
endwhile(expression)
macro
开始定义宏以便后续调用
macro(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endmacro(<name>)
endmacro
结束宏块
endmacro(expression)
function
开始定义函数以便后续调用
function(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endfunction(<name>)
endfunction
结束函数定义
endfunction(expression)
return
从一个文件、目录或者函数返回
return()
separate_arguments
将以空格分隔的参数列表转化为以分号分隔的列表
separate_arguments(<var> <NATIVE|UNIX|WINDOWS>_COMMAND "<args>")
separate_arguments(<var>)
execute_process
执行一个或者多个子程序
execute_process(COMMAND <cmd1> [args1...]]
[COMMAND <cmd2> [args2...] [...]]
[WORKING_DIRECTORY <directory>]
[TIMEOUT <seconds>]
[RESULT_VARIABLE <variable>]
[RESULTS_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>])
file
文件操作命令
file(WRITE <filename> <content>...)
file(APPEND <filename> <content>...)
file(READ <filename> <variable> [OFFSET <offset>] [LIMIT <max-in>] [HEX])
file(STRINGS <filename> <variable> [<options>...])
list
列表操作
list(LENGTH <list> <output variable>)
list(GET <list> <element index> [<element index> ...]
<output variable>)
list(APPEND <list> [<element> ...])
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
list(FIND <list> <value> <output variable>)
list(INSERT <list> <element_index> <element> [<element> ...])
list(REMOVE_ITEM <list> <value> [<value> ...])
list(REMOVE_AT <list> <index> [<index> ...])
list(REMOVE_DUPLICATES <list>)
list(REVERSE <list>)
list(SORT <list>)
string
字符串操作:查找与替换;正则匹配;修改;比较;哈希;生成(generation)。
find_file
查找文件
find_file (<VAR> name1 [path1 path2 ...])
find_file (
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
find_file (<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_file (<VAR> NAMES name)
find_library
查找库
find_file (<VAR> name1 [path1 path2 ...])
find_file (
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
find_file (<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_file (<VAR> NAMES name)
find_package
查找包
find_package(<package> [version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[NO_POLICY_SCOPE])
find_package(<package> [version] [EXACT] [QUIET]
[REQUIRED] [[COMPONENTS] [components...]]
[CONFIG|NO_MODULE]
[NO_POLICY_SCOPE]
[NAMES name1 [name2 ...]]
[CONFIGS config1 [config2 ...]]
[HINTS path1 [path2 ... ]]
[PATHS path1 [path2 ... ]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[NO_DEFAULT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_PACKAGE_REGISTRY]
[NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing.
[NO_CMAKE_SYSTEM_PATH]
[NO_CMAKE_SYSTEM_PACKAGE_REGISTRY]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH])
find_package(<package> [major[.minor]] [EXACT] [REQUIRED|QUIET])
find_package (<package> PATHS paths... NO_DEFAULT_PATH)
find_package (<package>)
find_path
寻找路径
find_path (<VAR> name1 [path1 path2 ...])
find_path (
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
find_path (<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_path (<VAR> NAMES name)
find_program
查找程序
find_program (<VAR> name1 [path1 path2 ...])
find_program (
<VAR>
name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
find_program (<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_program (<VAR> NAMES name)
get_cmake_property
获取CMake实例的全局属性
get_cmake_property(VAR property)
get_directory_property
在指定目录下获取属性
get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)
get_directory_property(<variable> [DIRECTORY <dir>] DEFINITION <var-name>)
get_filename_component
获取文件名全称的指定部分
get_filename_component(<VAR> <FileName> <COMP> [CACHE])
get_filename_component(<VAR> <FileName>
<COMP> [BASE_DIR <BASE_DIR>]
[CACHE])
get_filename_component(<VAR> <FileName>
PROGRAM [PROGRAM_ARGS <ARG_VAR>]
[CACHE])
get_property
获取属性
get_property(<variable>
<GLOBAL |
DIRECTORY [dir] |
TARGET <target> |
SOURCE <source> |
INSTALL <file> |
TEST <test> |
CACHE <entry> |
VARIABLE>
PROPERTY <name>
[SET | DEFINED | BRIEF_DOCS | FULL_DOCS])
include
从一个文件或者模块中加载并运行CMake代码
include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR>] [NO_POLICY_SCOPE])
include_guard
为当前正在执行的文件提供一个包含guard。
include_guard([DIRECTORY|GLOBAL])
mark_as_advanced
标记高级缓存变量
mark_as_advanced([CLEAR|FORCE] VAR [VAR2 ...])
math
数学表达式
math(EXPR <output-variable> <math-expression>)
message
显示一条消息给用户
message([<mode>] "message to display" ...)
(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.
option
给用户提供选项
option(<option_variable> "help string describing option"
[initial value])
set_directory_properties
设置目录属性
set_directory_properties(PROPERTIES prop1 value1 prop2 value2)
set_property
设置属性值
set_property(<GLOBAL |
DIRECTORY [dir] |
TARGET [target1 [target2 ...]] |
SOURCE [src1 [src2 ...]] |
INSTALL [file1 [file2 ...]] |
TEST [test1 [test2 ...]] |
CACHE [entry1 [entry2 ...]]>
[APPEND] [APPEND_STRING]
PROPERTY <name> [value1 [value2 ...]])
set
为环境变量、正好普通变量、缓存变量设置一个给定的值
set(<variable> <value>... [PARENT_SCOPE])
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
set(ENV{<variable>} <value>...)
site_name
为计算机名称设定一个给定的值
site_name(variable)
unset
为变量,缓存变量或者环境变量恢复原设定值
unset(<variable> [CACHE | PARENT_SCOPE])
unset(ENV{LD_LIBRARY_PATH})
variable_watch
观测CMake变量值的变化
variable_watch(<variable name> [<command to execute>])