例如,对于同一目标多次调用target_link_libraries()
是否会附加目标的依赖项,我还不清楚。例如,我可以按如下方式为目标main
添加选项吗?
option(ASSERT "Evaluate assertions" ON)
find_package(MyLib REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main PRIVATE MyLib::MyLib)
if (ASSERT)
target_link_libraries(main PRIVATE MyLib::enable_assert)
endif()
答案 0 :(得分:3)
是的,来自target_link_libraries()
文档:
重复调用相同的
<target>
会按调用顺序追加项目。
在您的示例中,这是
target_link_libraries(main PRIVATE MyLib::MyLib)
...
target_link_libraries(main PRIVATE MyLib::enable_assert)
等效于此:
target_link_libraries(main PRIVATE MyLib::MyLib MyLib::enable_assert)
如果您使用简单的布尔检查来确定是否包含MyLib::enable_assert
作为参数,则可以使用conditional generator expression来简化此逻辑:
target_link_libraries(main PRIVATE
MyLib::MyLib
$<IF:$<BOOL:${ASSERT}>, MyLib::enable_assert, >
)