gpt4 book ai didi

build - CMake:如何最好地构建多个(可选)子项目?

转载 作者:IT老高 更新时间:2023-10-28 11:12:46 28 4
gpt4 key购买 nike

想象一个包含多个组件的整体项目:

  • 基本
  • 网络
  • app-a
  • app-b
  • app-c

现在,假设 web 依赖于依赖于 basic 的 io,所有这些东西都在一个 repo 中,并且有一个 CMakeLists.txt 来将它们构建为共享库。

如果这三个应用程序都是可选的并且在构建时可能不存在,我应该如何设置才能构建这三个应用程序?

一个想法是在主仓库中有一个空的“apps”目录,我们可以将我们想要的任何应用程序仓库克隆到其中。我们的主要 CMakeLists.txt 文件可以使用 GLOB 查找所有应用程序目录并构建它们(事先不知道会有多少)。这种方法的问题包括:

  • 显然,当你说 make 时,CMake 不会重新生成,所以如果你添加一个新的应用程序,你必须再次运行 cmake
  • 它将特定结构强加给进行构建的人员。
  • 如何制作一个应用的两个克隆并针对同一个库构建分别构建它们并不明显。

一般概念类似于传统的递归 CMake 项目,但较低级别的模块不一定事先知道哪些较高级别的模块将使用它们。然而,我不想要求用户将低级库安装在固定位置(例如 /usr/local/lib)。但是,我确实希望一次调用 make 以注意到整个项目中更改的依赖项,因此如果我正在构建一个应用程序但更改了其中一个低级库,那么一切都会适本地重新编译。

最佳答案

我的第一个想法是使用 CMake 导入/导出目标 功能。

有一个用于 basicioweb 的 CMakeLists.txt 和一个引用这些的 CMakeLists.txt。然后,您可以使用 CMake export 功能导出这些目标,然后应用程序项目可以import CMake 目标。

当您首先构建库项目时,应用程序项目应该能够自动找到已编译的库(无需将库安装到 /usr/local/lib)否则总是可以设置设置正确的 CMake 变量以指示正确的目录。

当这样做时,应用程序项目中的 make 不会在库项目中执行 make,您必须自己处理。

关于build - CMake:如何最好地构建多个(可选)子项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6459686/

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