【问题标题】:CMake: target_link_libraries based on flagCMake:基于标志的 target_link_libraries
【发布时间】:2020-12-09 19:07:42
【问题描述】:

已经链接了 4 个库,如果 FLAG 为 ON,则希望链接一个新库。

target_link_libraries (lib1 lib2 lib3 lib4 ${CMAKE_DL_LIBS})

我希望它是这样的

target_link_libraries (lib1 lib2 lib3 lib4 if(FLAG) lib5 endif() ${CMAKE_DL_LIBS})

有没有办法在 cmakelists.txt 中实现这个?

【问题讨论】:

  • 您可以有条件地(在if 命令下)设置一个变量并(无条件地)将此变量传递给target_link_libraries 调用。参见例如那个问题:stackoverflow.com/q/41572275/3440745。或者,您可以有条件地致电target_link_libraries(lib1 lib5)

标签: cmake cmakelists-options target-link-libraries


【解决方案1】:

只需使用多个target_link_library 命令。

例如以下可用于为 unix 目标添加库

target_link_libraries (lib1 lib2 lib3 lib4 ${CMAKE_DL_LIBS})

if(UNIX)
    target_link_libraries(lib1 lib5)
endif()

或者,您可以使用包含要包含的库的列表

set(LIBS lib2 lib3 lib4 ${CMAKE_DL_LIBS})

if(UNIX)
    list(APPEND LIBS lib5)
endif()

target_link_libraries(lib1 ${LIBS})

理论上你也可以使用生成器表达式,但恕我直言,这将成为可读性最低的替代方案

target_link_libraries(lib1 lib2 lib3 lib4 ${CMAKE_DL_LIBS} $<$<BOOL:${UNIX}>:lib5>)

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2014-11-20
    相关资源
    最近更新 更多