如何在 CMake 中将多个库目标分组为一个

use*_*089 4 cmake

我正在尝试将多个目标分组为一个目标,以便下游用户只需要链接到该单个目标。下游用户不需要查找所有目标,并且上游库中的所有功能都可以通过链接到该目标来使用。请参阅下面我失败的尝试的 CMakeLists。

cmake_minimum_required(VERSION 3.11)
project(modules)

# 10 libraries with actually functionality
add_subdirectory(mylib1)
add_subdirectory(mylib2)
...
add_subdirectory(mylib10)

# failed attempt to create a single library that links to the above 10
add_library(myliball)

target_link_libraries(myliball mylib1 mylib2 ... mylib10)

install(TARGETS myliball
        EXPORT ${CMAKE_PROJECT_NAME}Targets
        ARCHIVE DESTINATION lib
        LIBRARY DESTINATION lib
        RUNTIME DESTINATION bin)

export(TARGETS myliball
      APPEND FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)
Run Code Online (Sandbox Code Playgroud)

当我运行 cmake 时它显示此错误

No SOURCES given to target: myliball
Run Code Online (Sandbox Code Playgroud)

我也许可以为 myliball 创建一个空类来解决这个问题,但这似乎很混乱。有一个更好的方法吗?

Tsy*_*rev 5

CMake 有一种特殊类型的库目标,用于分组 - INTERFACE

add_library(myliball INTERFACE)

target_link_libraries(myliball INTERFACE mylib1 mylib2 ... mylib10)
Run Code Online (Sandbox Code Playgroud)

这样的库目标不会被编译,它只是在链接时传播其 INTERFACE 属性。