欺骗gmake构建/复制文件以保留时间戳并避免完全重建



简短的背景信息:

出于一些相当复杂的原因,我试图欺骗我的项目构建系统。我们正在与Code Composer Studio合作,在Windows上来自德州仪器 (Texas Instruments( 和所包含的 gmake 实现。据我所知,我们使用标准的调试构建选项几乎未经修改(不幸的是,我对 make 的理解和我们对它的实现是有限的(。在 Code Composer 中开发时,构建按预期工作,仅更改了已更改的文件及其依赖项。有时我需要从我们使用的代码生成器重新生成所有代码,从而触发完全重建。

为了欺骗这个完整的重建,我写了一个python脚本,将所有原始文件从项目中移出,等待代码生成器,然后比较文件并将新的相同文件替换为旧文件。因此,应保留创建时间戳和上次修改时间戳。这在检查这些属性时似乎也有效。但是,始终会触发问题的完全重建。

问题的核心:

  1. 在Code Composer中构建了项目并再次构建后,它得出的结论是,正如人们所期望的那样,没有任何变化,也没有什么可做的。
  2. 我将文件移出文件夹并再次移回,尽可能保留创建时间戳和上次修改的时间戳(在 Windows 资源管理器 -> 属性中(。
  3. 现在重建项目时,它将重建所述文件及其依赖项,尽管它与之前相同并且具有相同的时间戳。

gmake在看什么?它是否检测到文件夹已更改。是在查看其他隐藏的时间戳吗?这是Windows问题吗?不应该这样做,插入一个带有旧时间戳的文件吗?

我错过了什么?有人知道吗?

在检查了这一点之后,我得出结论,问题不在于gmake或makefile,而在于Code Composer Studio/Eclipse makefile的生成

我们使用Code Composer Studio中内置的makefile生成(这是一个Eclipse衍生物(。它似乎可以跟踪文件是否已从项目工作区中删除/移出。如果有,则会在生成文件期间删除该文件的依赖项,从而触发重建。

例子:

案例1,按我预期工作:

在代码编写器工作室中重新生成未更改的项目。由于没有任何更改,因此不会重新编译任何内容。

案例2,按我预期工作:

单个文件中更改某些内容然后重建会导致仅重新编译该单个文件。正如我/曾经期望的那样。

情况3,没有像我预期的那样工作:

有一个未更改的项目并将一个源代码文件 (xyz.cpp( 移出项目,不以任何方式更改它,然后将其移回会导致重新编译 xyz.obj。

Code Composer/Eclipse似乎跟踪了文件结构。尽管文件被完全按照原样放回项目中,但Code Composer/Eclipse在生成makefile期间删除了xyz.obj,从而触发了重建。 另一方面;关闭代码编辑器,来回移动文件,重新打开代码编辑器并重新生成makefile/重建按预期工作。不会重建任何内容,也不会删除任何 .obj 文件。

由于这与gmake和makefile没有任何关系,我想这个问题一开始就无效/无关紧要。我将收集我的想法,并重新制定一个严格作为代码编写器/Eclipse差事的新问题。

如果有人发现自己处于同样的情况或手上有相关信息,请分享!

最新更新