【发布时间】:2011-09-21 12:40:06
【问题描述】:
想象一个包含多个组件的整体项目:
- 基本
- io
- 网络
- app-a
- app-b
- app-c
现在,假设 web 依赖于依赖于 basic 的 io,所有这些东西都在一个 repo 中,并且有一个 CMakeLists.txt 来将它们构建为共享库。
如果这三个应用程序都是可选的并且在构建时可能不存在,我应该如何设置才能构建这三个应用程序?
一个想法是在主仓库中有一个空的“apps”目录,我们可以将我们想要的任何应用程序仓库克隆到其中。我们的主要 CMakeLists.txt 文件可以使用 GLOB 查找所有应用程序目录并构建它们(事先不知道会有多少)。这种方法的问题包括:
- 显然,当您只说
make时,CMake 不会重新 glob,因此如果您添加一个新应用程序,您必须再次运行cmake。 - 它将特定结构强加给进行构建的人员。
- 目前尚不清楚如何制作单个应用程序的两个克隆并针对同一个库构建分别构建它们。
一般概念类似于传统的递归 CMake 项目,但较低级别的模块不一定事先知道哪些较高级别的模块将使用它们。但是,我不想要求用户将低级库安装在固定位置(例如/usr/local/lib)。但是,我确实希望一次调用 make 以注意到整个项目中更改的依赖项,这样如果我正在构建一个应用程序但更改了其中一个低级库,那么一切都会正确地重新编译。
【问题讨论】:
-
好问题。我正在寻找相同问题的解决方案。
-
检查this solution。是否切中要害?
-
@Antonio:我不知道......我使用下面我的答案中解释的解决方案自己解决了这个问题。你的那个链接似乎有点相关,但可能与我原来的问题有点不同。不管怎样,它现在已经落后我很久了。 :)
标签: build cmake modularity