我不确定 CMakeif()
命令会将条件子句中的符号视为变量还是字符串文字。所以我做了一些实验。
Script1.cmake
cmake_minimum_required(VERSION 3.15)
set(XXX "YYY") #<========== HERE!!
if(XXX STREQUAL "XXX")
message("condition 1 is true") # If reach here, XXX is treated as string
elseif(XXX STREQUAL "YYY")
message("condition 2 is true") # If reach here, XXX is treated as variable
endif()
输出是:
condition 2 is true
所以我得出以下结论 1。
对于条件子句中的符号:
- 如果符号之前定义为变量,CMake 会将其视为变量并使用其值进行评估。
- 如果符号之前未定义为变量,CMake 会将其视为字符串。
然后我又做了一个实验。
set(ON "OFF")
if(ON)
message("condition 3 is true") # If reach here, ON is treated as a constant.
else()
message("condition 4 is true") # If reach here. ON is treated as a variable.
endif()
输出是:
condition 3 is true
因此,尽管明确定义为变量,该ON
命令仍将其视为 TRUE 值的常量。这与我之前的结论 1直接矛盾。if
那么我如何确定 CMake if() 命令会将符号视为字符串还是变量?
2019 年 7 月 11 日上午 11:04 添加
似乎该if(constant)
形式先于其他形式的if()
陈述。(源)
if(<constant>)
如果常数为 1、ON、YES、TRUE、Y 或非零数字,则为真。如果常量为 0、OFF、NO、FALSE、N、IGNORE、NOTFOUND、空字符串或以后缀 -NOTFOUND 结尾,则为 False。命名布尔常量不区分大小写。如果参数不是这些特定常量之一,则将其视为变量或字符串,并使用以下签名。
所以现在,在应用我的结论 1之前,我必须先参考上述规则。(这可能是一个答案,但我还不确定。)