gpt4 book ai didi

cmake - CMake 生成器表达式中的三元运算符

转载 作者:行者123 更新时间:2023-12-03 12:17:48 25 4
gpt4 key购买 nike

Cmake的generator expressions允许我在某些函数调用中使用逻辑表达式。例如,如果我想添加 /MTd Debug模式下的编译器标志,我可以说

add_compile_options($<$<CONFIG:Debug>:/MTd>)

CONFIG等于“调试”,这将调用 add_compile_options值为“/MTd”,否则为空字符串。

但通常,我不想在值和空字符串之间做出决定,而是在两个值之间做出决定。在上面的例子中,如果 CONFIG不是“调试”,我想通过 /MT (没有尾随 d)。我希望有这样的语法:
add_compile_options($<$<CONFIG:Debug>:/MTd:/MT>)

注意上面是 无效代码 根据 CMake 规范。我想出的最好的实际工作是这样的:
add_compile_options($<$<CONFIG:Debug>:/MTd>$<$<NOT:$<CONFIG:Debug>>:/MT>)

这对我来说似乎非常多余。是否有更短、更易读的方式来决定两个值?

注意:我意识到在这种特殊情况下,我可以这样写:
add_compile_options(/MT$<$<CONFIG:Debug>:d>)

但这对我来说似乎很棘手,并且仅在一个选项是另一个选项的子字符串的情况下才有效。

最佳答案

请注意,cmake 3.8 准确添加了您想要生成器表达式的内容...

$<IF:?,true-value...,false-value...>
true-value... if ? is 1, false-value... if ? is 0

用法示例:
target_link_libraries(MyLib PUBLIC
$<IF:$<CONFIG:Debug>,cppzmq,cppzmq-static>
)

哪里 cppzmqDebug 中使用的共享库构建和 ​​ cppzmq-static是在其他情况下使用的静态库,例如 Release

关于cmake - CMake 生成器表达式中的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34393562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com