gpt4 book ai didi

c++ - 用于模块化 C++ 框架的 CMAKE

转载 作者:行者123 更新时间:2023-11-30 01:26:49 36 4
gpt4 key购买 nike

我正在重构一个独立于平台的大型 C++ 框架,以便它的库和可执行文件不再必须位于同一目录(甚至存储库)中,事实证明这非常具有挑战性。该框架目前只有我一个人使用,它现在应该面向我们的整个工作组,因此我必须尽可能保持其模块化和自动化。

我的基本结构是这样的

  • 应用/
    • 应用程序 1,应用程序 2,...
  • 图书馆/
    • 核心,lib1,lib2,...
  • bin:
    • app1、app2、libcore、liblib1、liblib2、...(在 NIX 上)
    • app1.exe、app2.exe、core.dll、lib1.dll、lib2.dll ...(在 Windows 上)

应用 依赖于,所有库都依赖于核心 库。这一切都在同一个根目录和 add_subdirectory 机制下正常工作。

项目依赖项是按照我调用 add_subdirectory 的顺序处理的:首先是 libs(核心是第一个),然后是 apps。 Cmake 非常友好地将 ${core_SOURCE_IR} 设置为相应的目录,并且所有二进制文件(库和应用程序)都在同一目录中生成。

我需要的建议是:

  • 我是否应该转向基于find_package 的方法(为每个 lib 和 FindLib.cmake 文件编写)
  • appslibs 如何找到彼此
  • 将二进制文件放在哪里
  • 如何传递包含依赖目标的目录
  • ExternalProject_Add ?

谢谢

最佳答案

我建议使用 INSTALL(TARGETS...连同 INSTALL(EXPORT...

有关完整的详细信息,请运行:

cmake --help-command INSTALL

FIND_PACKAGE通常用于查找已安装的外部项目(未使用 CMake 的 INSTALL(EXPORT... 命令安装)和 ExternalProject_Add用于下载、配置、构建和安装外部项目。

如果您使用 INSTALL(EXPORT...与您的每个库和 exe,然后只是 INCLUDE安装<target>.cmake在您的主 CMakeLists.txt 中,这些将作为适当的 CMake 目标可用,并且每个配置的依赖项已经设置。

至于安装这些导出文件的位置 - 这取决于您,但只要您指定的路径与您在 INCLUDE 时使用的位置相同即可。文件稍后,它应该可以正常工作。

关于c++ - 用于模块化 C++ 框架的 CMAKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9671533/

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