【问题标题】:Commit cmake autogen makefiles/project files to git repo将 cmake autogen makefiles/项目文件提交到 git repo
【发布时间】:2019-06-05 07:41:41
【问题描述】:

如果我有生成 makefile 和项目文件的 cmake 构建系统,我应该提交 makefile 并将其推送到 git repo 吗?这样做有什么好处和坏处?

如果不是,那么在每次拉取之后和构建之前,我们需要使用 cmake 再次生成所有内容吗?

另外,如果我生成了 makefile 和构建目标,然后更改了源文件,然后再次生成了 makefile(这是不必要的),cmake 会知道什么已经是最新的吗?或者它会重新从头开始构建?

【问题讨论】:

  • "然后在每次拉取之后和构建之前,我们需要使用 cmake 再次生成所有内容" - 完全正确。 “如果我生成了 makefile 和构建目标,然后更改了源文件,然后再次生成了 makefile(这是不必要的),cmake 会知道什么已经是最新的吗?” - CMake 将生成 makefile,它会关心检测源文件中的更改。
  • 您永远不应该将构建产品检查到您的存储库中。将它们签入只会产生差异噪音并让文件变得不同步,从而导致错误。

标签: git makefile cmake


【解决方案1】:

在基于 CMake 的项目中,运行 cmake 不仅是构建过程的正常和预期部分,而且是必需的。它准备为构建机器定制的构建支持和数据(项目文件/makefile/等)。提交这些生成的工件没有任何人,而且它不必要地为混淆和用户错误打开了一条途径(使用存储库中的版本而不是生成新的版本)。

有一种观点认为,任何可以自动(重新)构建的东西都不应该被提交。我自己并没有走这么远,但肯定没有必要提交任何必须(重新)构建的东西。

【讨论】:

  • 我知道我不会将 cmake autogen makefile 提交/推送到存储库。我不明白的是,如果我生成了 makefile,然后对需要更改 makefile 的代码进行了更改,我现在将创建的新 makefile 将如何知道已经构建的内容?
  • 这是一个完全独立的问题,@user28282,但它有一个相当简单的答案。 make 知道 look 已经构建了什么。 makefile 告诉它要构建什么目标,因此 make 不必猜测。 makefile 还告诉它每个文件的先决条件是什么,因此它可以(递归地)确定哪些已经存在的目标相对于源是过时的(按时间戳)。这些是make 的一些核心功能。
猜你喜欢
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多