有什么方法可以简化在CMake中链接多个库的方式?

时间:2019-04-03 10:06:50

标签: cmake

我是CMake的新手,正在尝试学习将其用于简单的项目。如果我有一个看起来像这样的CMakeLists.txt文件:

add_executable(alpha alpha.cpp)
add_executable(beta beta.cpp)

add_library(one STATIC one.cpp)
add_library(two STATIC two.cpp)

target_link_libraries(alpha one)
target_link_libraries(alpha two)
target_link_libraries(beta one)
target_link_libraries(beta two)

有没有一种方法可以简化这种模式?我想要的是定义类似all_libraries的东西,其中既包含one也包含two,然后每个二进制文件只需链接一次。有办法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用接口库:

add_library(all_libraries INTERFACE)
target_link_libraries(all_libraries
    INTERFACE
        one
        two
)
... then later ...
target_link_libaries(alpha PUBLIC all_libraries)

您可以使用变量:

set(all_libraries one two)
.. then later ..
target_link_libraries(alpha PUBLIC ${all_libraries})

注意:

  • 我建议始终明确指定PUBLIC,PRIVATE和INTERFACE关键字。
  • 我会使用接口库。拥有一个大项目,将不同的库组合暴露为一个接口库,这比将您仅将另一个大项目链接到该接口要好。提供良好的控制和外观。