基础

  1. set(var_name var_value) #定义变量或赋值
  2. ${X} #X为变量名称,${}表示取X的值。但是在IF语句中不用加${},直接用变量名X即可
  3. LESS # <
  4. GREATER # >
  5. EQUAL # =
  6. GREATER_EQUAL #cmake3.7 >=
  7. STREQUAL # 字符串相等
  8. if (${CMAKE_GENERATOR} MATCHES "Visual Studio*") #是否包含有Visual Studio的字符

message

  1. message( [STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
  2. "message to display" ...)

消息等级

  • 不填(无) = 重要消息;
  • STATUS = 非重要消息;
  • WARNING = CMake 警告, 会继续执行;
  • AUTHOR_WARNING = CMake 警告 (dev), 会继续执行;
  • SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤;
  • FATAL_ERROR = CMake 错误, 终止所有处理过程;

示例

  1. SET(USER_KEY, "Hello World")
  2. message("this var key = ${USER_KEY}.") #不填,重要消息
  3. message(STATUS "ok") #非重要消息

if

  1. if(expression1)
  2. # commands ...
  3. elseif(expression2)
  4. # commands ...
  5. else()
  6. # commands ...
  7. endif()
  8. # expression
  9. IF (var) # 不是空、0、N、NO、OFF、FALSE、NOTFOUND时为真
  10. IF (NOT var)
  11. IF (var1 AND var2)
  12. IF (var1 OR var2)
  13. IF (COMMAND cmd) # 当给定的cmd确实是命令并可以调用时为真
  14. IF (EXISTS dir) # 目录名存在
  15. IF (EXISTS file) # 文件名存在
  16. IF (IS_DIRECTORY dirname) # 当dirname是目录
  17. IF (file1_IS_NEWER_THAN file2) # file1比filadd_definitionse2新
  18. IF (variable MATCHES regex) # 符合正则

判断变量是否被定义过

  1. # 这两种情况都是判断变量有没有被定义过
  2. if(DEFINED address)
  3. else()
  4. endif()
  5. if(address)
  6. else()
  7. endif()

注释

  1. #[[
  2. 多行注释
  3. ]]
  4. #单行注释

循环

  1. WHILE (condition)
  2. COMMAND1(ARGS)
  3. // ...
  4. ENDWHILE (condition)