CMake: target_link_libraries based on flag



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

只需使用多个target_link_library命令。

例如,以下内容可用于为unix目标添加lib

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>)

最新更新