gpt4 book ai didi

c++ - 如何使用 CMake 为其他项目 'install' 和使用内部依赖项

转载 作者:行者123 更新时间:2023-12-02 10:39:15 25 4
gpt4 key购买 nike

澄清 :如果下面的设置是一种合理的方法,那么我的问题主要是,当我运行 ninja install 时,如何最好地使用 .lib 添加公共(public)头文件,因为我的解决方案目前不这样做。

有无数关于如何以不同方式做事的例子,许多似乎相互矛盾,让我更加困惑。

我正在尝试更改内部构建系统并将其替换为 CMake。代码库由许多不同的组件/库组成,如操作系统/平台抽象、网络、功能等。在此之前总是作为一个大代码库编译在一起,因此运行 clean 将删除所有内容并重建所有依赖项。

现在到了我无法理解在 CMake 中实现这一点的现代智能方式的部分。

忽略顶部需要依赖链工具这一事实,我的想法是按照库的顺序构建组件/库,而不依赖于最顶层,因为隔离构建运行。
然后每个独立的构建运行将使用其依赖项构建,例如仅用于操作系统抽象库的 windows API,然后在其上运行安装和导出。

  • 这是将库编译为 Windows 上的 .lib 或 linux 上的 .a 并将其导出到已知共享位置的一般首选方式吗?
  • 我猜这将需要将此库的所有公共(public)头文件复制到同一位置?如果是这样,这是如何最正确地完成的?

  • 如果我有我的操作系统抽象文件夹结构
    OSabstraction/
    includes/
    OSabstraction/
    abstraction.h
    src/
    abstraction.cpp
    CMakeLists.txt

    我的 CMakeLists 是
    cmake_minimum_required(VERSION 3.12)
    project(OSabstraction LANGUAGES CXX)

    add_library(abstraction)

    target_sources(abstraction
    PRIVATE
    src/abstraction.cpp
    )
    target_include_directories(abstraction
    PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/includes/>
    $<INSTALL_INTERFACE:include>
    )

    install(
    TARGETS abstraction
    EXPORT abstraction-export
    ARCHIVE DESTINATION lib
    )

    我将如何最好地在许多其他内部项目中使用这个库?这个库实际上要大很多倍,那么对于大型项目来说,正确的方法是什么?

    编辑:我尝试关注 Pablo Arias' guide on how to do CMake Right ,但我不确定 build_interface 和 install_interface 生成器如何通过导出 .lib 文件来获取我的头文件。

    最佳答案

    推荐的解决方案是将包管理器与 CMake 一起使用。
    下面的链接是一个完整的 C++ 项目设置模板,可以使用包管理器 https://conan.io/支持将依赖项拆分为单独的库。

    https://github.com/trondhe/cmake_template

    关于c++ - 如何使用 CMake 为其他项目 'install' 和使用内部依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52642785/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com