You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake Generator Expression使用变量比较时结果不符合预期

问题分析与解决

你的问题不是CMake生成器表达式(Generator Expression)不支持变量比较,而是变量展开后的字符串与目标字符串格式不匹配,导致比较结果不符合预期。

原因解析

当你使用${TEST_VAR}时,CMake会在配置阶段直接将变量展开为字符串test(不带引号),而生成器表达式里的STREQUAL操作会在生成阶段比较test和"test"(带引号的字符串)——两者内容并不相同,因此返回DIFFERENT。

正确写法示例

你可以通过以下几种方式修正:

方式1:统一两边字符串格式(都不带引号)

add_library(iflib INTERFACE)
set(TEST_VAR "test")
target_compile_definitions(iflib INTERFACE
    GEN_EXP=$<IF:$<STREQUAL:${TEST_VAR},test>,"EQUAL","DIFFERENT">
)

方式2:让变量值包含引号,保持两边格式一致

add_library(iflib INTERFACE)
set(TEST_VAR "\"test\"") # 转义引号,使变量值为带引号的字符串
target_compile_definitions(iflib INTERFACE
    GEN_EXP=$<IF:$<STREQUAL:${TEST_VAR},"test">,"EQUAL","DIFFERENT">
)

方式3:使用$<QUOTE>生成器表达式包裹变量

add_library(iflib INTERFACE)
set(TEST_VAR "test")
target_compile_definitions(iflib INTERFACE
    GEN_EXP=$<IF:$<STREQUAL:$<QUOTE:${TEST_VAR}>,"test">,"EQUAL","DIFFERENT">
)

以上三种写法都能让STREQUAL的两边字符串完全匹配,最终GEN_EXP会被设置为EQUAL。

内容的提问来源于stack exchange,提问作者SupAl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:55:06