基础
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()# expressionIF (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)
