首页 > 解决方案 > CMake:基于标志的 target_link_libraries

问题描述

已经链接了 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 中实现这个?

标签: cmakecmakelists-optionstarget-link-libraries

解决方案


只需使用多个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>)

推荐阅读