基础
set(var_name var_value) #定义变量或赋值
${X} #X为变量名称,${}表示取X的值。但是在IF语句中不用加${},直接用变量名X即可
LESS # <
GREATER # >
EQUAL # =
GREATER_EQUAL #cmake3.7 >=
STREQUAL # 字符串相等
if (${CMAKE_GENERATOR} MATCHES "Visual Studio*") #是否包含有Visual Studio的字符
message
message( [STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
"message to display" ...)
消息等级
- 不填(无) = 重要消息;
- STATUS = 非重要消息;
- WARNING = CMake 警告, 会继续执行;
- AUTHOR_WARNING = CMake 警告 (dev), 会继续执行;
- SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤;
- FATAL_ERROR = CMake 错误, 终止所有处理过程;
示例
SET(USER_KEY, "Hello World")
message("this var key = ${USER_KEY}.") #不填,重要消息
message(STATUS "ok") #非重要消息
if
if(expression1)
# commands ...
elseif(expression2)
# commands ...
else()
# commands ...
endif()
# expression
IF (var) # 不是空、0、N、NO、OFF、FALSE、NOTFOUND时为真
IF (NOT var)
IF (var1 AND var2)
IF (var1 OR var2)
IF (COMMAND cmd) # 当给定的cmd确实是命令并可以调用时为真
IF (EXISTS dir) # 目录名存在
IF (EXISTS file) # 文件名存在
IF (IS_DIRECTORY dirname) # 当dirname是目录
IF (file1_IS_NEWER_THAN file2) # file1比filadd_definitionse2新
IF (variable MATCHES regex) # 符合正则
判断变量是否被定义过
# 这两种情况都是判断变量有没有被定义过
if(DEFINED address)
else()
endif()
if(address)
else()
endif()
注释
#[[
多行注释
]]
#单行注释
循环
WHILE (condition)
COMMAND1(ARGS)
// ...
ENDWHILE (condition)