制作 - 自动生成的文件问题

时间:2011-05-23 15:03:40

标签: makefile

以下是上下文:

我正在使用makefile在每次构建时创建一个 .h ,包括另一个将使用此头文件的makefile。我无法编辑第二个。

根据我的文件使用目标 all ,它会在第一次编译时创建缺少的MyHeader.h。问题是,当我重新编译时,标题不会重新生成...

我的makefile如下所示:

all: myHeader.h

myHeader.h:
    scriptToBuildMyHeader.sh

include obscureAndPrivateMakefile.make

我也在开始尝试使用.phony目标。相同的结果:一旦创建,它将不会在每次构建时重新生成。

PS:我不能在make之前调用脚本。

有些makfile-Masters有任何想法如何处理?

谢谢!

3 个答案:

答案 0 :(得分:3)

因为myHeader.h没有依赖关系,所以永远不会重建它。您可以通过从 myHeader.h创建依赖到虚假目标来解决此问题,例如:

forcebuild:
    # dummy; do nothing and don't create this file
.PHONY: forcebuild
myHeader.h: forcebuild
   scriptToBuildMyHeader.sh

但是这会大大减慢你的构建速度,因为每次都需要重建标题(以及包含它的任何源文件)。

答案 1 :(得分:1)

问题在于,因为myHeader.h不依赖于任何东西,所以它存在并且因此在第二次构建时是最新的。为了确保每次构建它,它必须依赖于不存在的文件:

myHeader.h: .FORCE
        scriptToBuildMyHeader.sh

.FORCE:

名称“.FORCE”(或有时候,FORCE)经常使用。

如果您使用GNU Make,您可以将“不存在”文件变为虚假目标:

.PHONY: .FORCE

这样做的好处是(GNU)make即使运行.FORCE也不会创建文件make -t - 这会破坏标头的自动重建,因为该规则取决于那里没有实际存在的文件.FORCE

答案 2 :(得分:0)

这是另一种可能的方法:

all: clean foo.txt

clean:
    rm foo.txt

foo.txt:
    echo > foo.txt

我正在使用echo > foo.txt来模拟标题的创建。