如果目标存在,则使用 CMake 生成器表达式进行链接

问题描述

我有这个 CMakeLists.txt 片段:

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 不会出现指向任一库的链接

解决方法

看似有效但不完全相同的逻辑是:

target_link_library(foo PUBLIC
  $<TARGET_NAME_IF_EXISTS:bar>
  $<TARGET_NAME_IF_EXISTS:baz>
)