如何在CMake中将多个库目标分组为一个 [英] How to group multiple library targets into one in CMake

查看:55
本文介绍了如何在CMake中将多个库目标分组为一个的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将多个目标分组为一个目标,因此下游用户只需要链接到该目标即可.下游用户不需要查找所有目标,并且可以通过链接到单个库来获得上游库中的所有功能.请在下面的CMakeList中查看我失败的尝试.

I am trying to group multiple targets into a single one so the downstream user only need to link to that single one. The downstream user won't need to look up all the targets and all functionality from the upstream library will be available by linking to that single one. Please see below CMakeLists of my failed attempt.

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)

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

When I run cmake it shows this error

No SOURCES given to target: myliball

我可能可以为myliball创建一个空类来解决此问题,但这似乎非常混乱.有更好的方法吗?

I can probably create an empty class for myliball to workaround this problem but that seems to be very messy. Is there a better way to do this?

推荐答案

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

CMake has a special type of library target which is intended for grouping - INTERFACE:

add_library(myliball INTERFACE)

target_link_libraries(myliball INTERFACE mylib1 mylib2 ... mylib10)

此类库目标未编译,仅用于在链接时传播其INTERFACE属性.

Such library target is not compiled, it just serves for propagate its INTERFACE properties when linked.

这篇关于如何在CMake中将多个库目标分组为一个的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆