【发布时间】:2021-06-19 00:30:23
【问题描述】:
我有这个 CMakeLists.txt sn-p:
if (TARGET bar)
target_link_libraries(foo PUBLIC bar)
else()
target_link_libraries(foo PUBLIC baz)
endif()
我想我可以使用 CMake 的生成器表达式来缩短它。我该怎么做?
我试过了:
target_link_library(foo PUBLIC $<IF:$<TARGET_EXISTS:bar>,bar,baz> )
但实际上,foo 似乎没有链接到任何一个库。
【问题讨论】:
-
在
if()sn-p 中使用PUBLIC关键字,但在带有正则表达式的snipper 中使用INTERFACE关键字。后一个关键字仅影响库的消费者,而不影响库本身。 -
@Tsyvarev 好点,但不幸的是这不是问题。我的猜测是 conditional expressions 和
$<IF:condition,true_string,false_string>一样只适用于字符串而不适用于目标。 -
我已将您的尝试 -
target_link_library(foo PUBLIC $<IF:$<TARGET_EXISTS:bar>,bar,baz> )复制粘贴到简单的CMakeLists.txt中并发现它有效:根据bar库目标的存在,它与bar或 @ 链接987654333@。我的 CMake 是 3.16。 -
是的,你是对的。我一定是在刷新我的 CMakeCache 或其他东西时遇到了问题。
标签: cmake generator-expression