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()
的值,建议根据选项的值使用-语句。