Cmake 三值生成器表达式不求值
假设我有一个选择:Cmake 三值生成器表达式不求值,cmake,Cmake,假设我有一个选择: 选项(目标为加载项“共享库目标为加载项”打开) 和一个变量: set(MyVar$) 为什么会将其存储为: “$” 而不是“addin”?当您的选项目标值在CMake的配置阶段展开时,生成器表达式在CMake的buildsystem生成阶段进行评估。因此,当您尝试使用message()打印生成器表达式时,您将看到其未展开的形式,因为尚未发生生成阶段 此外,并非所有CMake命令都接受生成器表达式。该命令不是可以处理生成器表达式的命令,因为它是在配置阶段处理的。如果某个命
选项(目标为加载项“共享库目标为加载项”打开)
和一个变量:
set(MyVar$)
为什么会将其存储为:
“$”
而不是
“addin”
?当您的选项目标值在CMake的配置阶段展开时,生成器表达式在CMake的buildsystem生成阶段进行评估。因此,当您尝试使用message()
打印生成器表达式时,您将看到其未展开的形式,因为尚未发生生成阶段
此外,并非所有CMake命令都接受生成器表达式。该命令不是可以处理生成器表达式的命令,因为它是在配置阶段处理的。如果某个命令可以处理生成器表达式,则该命令的文档中将明确提到它(例如或)
例如,请参见Tsyvarev的回答。这是在configure\u file()
中输入文件中引用的实际变量。是否有可能以某种方式使用表达式来代替变量名?这是在生成阶段发生的,对吗?由于正在修改输入文件并将其发送到项目二进制目录
@Sean McVeigh No,配置文件()
(顾名思义)也会在配置时发生。如果要更改传递给configure\u file()
的值,建议根据选项的值使用-语句。