是否有可以管理版本依赖性的C ++构建系统?

时间:2011-03-10 16:57:22

标签: c++ build build-process

一点点背景,我们有一个相当大的代码库,它构建在一组库中 - 然后分发给各种二进制文件内部使用。目前,构建过程是随意的,一切都是在主干上构建的。

我们想探讨是否有一个构建系统可以让我们管理版本并自动引入依赖关系。这样的工具适用于java,Maven。我喜欢它的包,存储库和依赖机制,我知道使用maven-native或maven-nar插件我们可以得到它。然而问题是我们无法将源树修复为“maven方式” - 不幸的是(至少maven-nar)插件似乎不喜欢没有这种结构的代码......

所以我的问题是,是否有一个满足以下C ++工具的工具

  1. 构建
  2. 包(例如包含所有标题的库,类似于.nar)
  3. 将包上传到“存储库”
  4. 自动从所述存储库中提取所需的依赖项,提取标题并包含在构建,提取库和链接中。依赖关系将在该二进制文件的“发行版”中描述 - 因此,如果我们使用CI服务器构建该“发布”,则构建脚本将列出必要的依赖项(如pom.xml文件)。
  5. 我可以通过修改make + shell脚本或使用额外的python模块waf / scons来进行打包和依赖管理 - 但是我会认为这是一个常见的问题而某个地方有人有这个工具?或者每个人都自己动手?或者我是否错过了waf / scons或CMake的重要功能?


    编辑:我应该补充一点,OS是首选,而非MS ......

3 个答案:

答案 0 :(得分:1)

例如,大多数Linux发行版都包含对其包的依赖性跟踪。在我试图将自己拼凑起来解决问题的所有事情中,最终他们都“不太完美”。最好的办法,恕我直言,是创建一个本地的yum / deb存储库或其他东西(继续我的linux示例),然后根据需要从那里提取东西。

许多源代码包还会快速告诉您必须安装的最小组件才能进行自构建(而不是安装二进制预编译软件包)。

不幸的是,这些方法更容易,但它比尝试自己做的更好。最后,要成为跨平台支持,您还需要每个操作系统中的一个这样的系统。有趣!

答案 1 :(得分:0)

我不确定我是否正确理解你想要的东西,但我会告诉你我们使用了什么并希望它有所帮助。

我们使用cmake进行构建。值得注意的是,cmake非常强大。除此之外,您可以在自定义目录中“make install”以收集标题和二进制文件以构建您的版本。我们将它与一些python脚本结合起来构建我们的版本。 YMMV,但有些东西可能对于通用工具而言过于具体,而自定义脚本可能是更简单的解决方案。

我们的构建工具直接从svn reposity(checkout,build,...)构建版本,我真的可以推荐这样做,以避免某些本地国家以某种不可预知的方式污染版本。它还强制执行再现性。

答案 2 :(得分:0)

这很大程度上取决于您所定位的平台。我只能真正代表Linux,但它还取决于你所针对的发行版,包是一个分布级概念。为了使事情变得更简单,有一些发行版系列使用类似的打包机制和包名,这意味着制作Debian包的相同配方也可能会生成Ubuntu包。

我肯定会说,如果您愿意使用一套可管理的打包机制来定位所有已知Linux发行版的子集,那么从长远来看,您将从而不是中受益。并按照分发创建者的意图构建包。这些系统允许您指定运行时和构建时依赖性,并且还存在自动CI环境(如基于rpm的发行版的OBS)。