判断
if常规判断
使用 if 进行条件判断,与其他语言差不多,同样也存在判断,else/elseif
测试代码:
#版本要求,如若没有此句代码,可能会发生错误
cmake_minimum_required(VERSION 3.2)
#空的工程
project(test NONE)
######################################################
#直接测试YES/NO
message(" 直接测试YES/NO:")
if (YES)
message("Condition 1")
endif()
if (NO)
message("Condition 2")
endif()
######################################################
#设置变量测试
message("\n 变量测试YES/NO:")
set(A "YES")
set(B "NO")
if (A)
message("Condition 3")
endif()
if (B)
message("Condition 4")
endif()
######################################################
#if/else组合
set(C "TRUE")
set(D "FALSE")
message("\n if/else组合:")
if (C)
message("Condition 5")
else()
message("Condition 6")
endif()
if (D)
message("Condition 7")
else()
message("Condition 8")
endif()
######################################################
#elseif判断
set(E "OFF")
set(F "ON")
message("\n if/elseif组合:")
if (E)
message("Condition 9")
elseif(F)
message("Condition 10")
else()
message("Condition 11")
endif()
######################################################
#if/elseif/else组合
set(G "0")
set(H "0")
message("\n if/elseif/else组合:")
if (G)
message("Condition 12")
elseif(H)
message("Condition 13")
else()
message("Condition 14")
endif()
输出
直接测试YES/NO:
Condition 1
变量测试YES/NO:
Condition 3
if/else组合:
Condition 5
Condition 8
if/elseif组合:
Condition 10
if/elseif/else组合:
Condition 14
-- Configuring done
-- Generating done
增加命令判断
接受其他的命令参数,可进行变量或者字符串判断。
使用:判断字符串是否为空
set(A "")
if (A STREQUAL "")
message("(direct)Value of A is an empty string")
endif()
测试代码:
#版本要求,如若没有此句代码,可能会发生错误
cmake_minimum_required(VERSION 3.2)
#空的工程
project(test NONE)
######################################################
#判断一个变量是否为空字符串
message(" 判断一个变量是否为空字符串:")
set(A "")
if (A STREQUAL "")
message("(direct)Value of A is an empty string")
endif()
######################################################
#使用一个变量储存另一个变量名字,从而间接判断
message("\n 使用一个变量储存另一个变量名字,从而间接判断:")
set(B "A")
# if ("${B}" STREQUAL "") #CMP0054 CMake3.1之前与下面形式相等。
if (${B} STREQUAL "")
message("(indirect)Value of ${B} is an empty string")
endif()
######################################################
#若像上面那样保存另一个变量的名字,那么具体的数值取决于上下文。
message("\n 若像上面那样保存另一个变量的名字,那么具体的数值取决于上下文:")
set("Jane foo" "")
set(C "Jane foo")
message("C=${C}")
if(${C} STREQUAL "")
message("C is empty")
else()
message("C is not empty,C=${C}")
endif()
######################################################
#由于CMake接受变量的任何名称,
#因此您无法通过添加“保留”符号从<variable | string>中过滤出<variable>:
message("\n 无法添加Filter:")
set("No Filter" "")
set("xNo Filter" "x")
set("!No Filter" "!")
set(" No Filter" " ")
set(D "No Filter")
message("D is ${D}")
#CMP0054policy下,会打印其中的内容。CMake3.1之后不会。
if ("x${D}" STREQUAL "x")
message("x{D} is \"x\"")
endif()
if ("!${D}" STREQUAL "!")
message("!{D} is \"!\"")
endif()
if (" ${D}" STREQUAL "x")
message(" {D} is \" \"")
endif()