代码之家  ›  专栏  ›  技术社区  ›  SupAl

字符串生成器表达式给出意外结果

  •  0
  • SupAl  · 技术社区  · 2 年前

    我有以下CMake代码:

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

    这将GEN_EXP定义设置为“EQUAL”,正如预期的那样。

    但是,当我与一个变量进行比较时:

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

    GEN_EXP的定义变为“不同”。

    是否不可能在生成器表达式中进行这种比较?

    1 回复  |  直到 2 年前
        1
  •  2
  •   fabian    2 年前

    对变量求值后,生成器表达式如下所示:

    target_compile_definitions(iflib INTERFACE
        GEN_EXP=$<IF:$<STREQUAL:test,"test">,"EQUAL","DIFFERENT">
    )
    

    根据是否要检查变量值中的引号,您需要将引号添加到变量的内容中

    set(TEST_VAR "\"test\"")
    

    或者更改生成器表达式,删除要与之比较的值周围的引号

    target_compile_definitions(iflib INTERFACE
        GEN_EXP=$<IF:$<STREQUAL:${TEST_VAR},test>,"EQUAL","DIFFERENT">
    )
    
    推荐文章