是否附加了目标?

时间:2019-12-12 09:59:43

标签: cmake

例如,对于同一目标多次调用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()

1 个答案:

答案 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, > 
)