2011-05-23 85 views
2

这里是上下文:制作 - 自动生成文件问题

我上生成文件的工作在每一个构建创建.H,包括另一个makefile文件,将使用此标题。我无法编辑第二个。

使用目标全部取决于我的文件,它编译第一次,创建失踪的MyHeader.h。问题是,当我重新编译,头不再生...

我的makefile文件看起来是这样的:

all: myHeader.h 

myHeader.h: 
    scriptToBuildMyHeader.sh 

include obscureAndPrivateMakefile.make 

我也有在开始时.PHONY目标试过。同样的结果:一旦创建,它就不会在每次构建时重新生成。 PS:我不能在make之前调用脚本。

做一些makfile大师有任何想法如何处理?

谢谢!

回答

3

因为myHeader.h没有依赖关系,所以一旦它存在就不会重建它。您可以从myHeader.h解决此通过创建一个依赖到假目标,如:

​​

然而,这将您的构建大幅放缓,如标题(和任何源文件,包括它),就需要每次重建。

0

这里的另一种可能的方法:

all: clean foo.txt 

clean: 
    rm foo.txt 

foo.txt: 
    echo > foo.txt 

在那里我使用echo > foo.txt来模拟你的头的创建。

1

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

myHeader.h: .FORCE 
     scriptToBuildMyHeader.sh 

.FORCE: 

.FORCE”(或有时,FORCE)是传统使用的名称。

如果你使用GNU make,都可以使“不存在”文件到假目标:

.PHONY: .FORCE 

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