问题描述
这是上下文:
我正在制作一个makefile,以便在每个版本中都创建一个.h,包括另一个将使用此标头的makefile。我无法编辑第二个。
使用所有取决于我的文件的目标,它会在第一次编译时创建丢失的MyHeader.h。问题是,当我重新编译时,不会重新生成标头...
我的makefile看起来像这样:
all: myHeader.h
myHeader.h:
scriptToBuildMyHeader.sh
include obscureAndPrivateMakefile.make
一开始我也尝试使用.phony目标。结果相同:一旦创建,就不会在每次构建时都重新生成。
PS:我无法在make之前调用脚本。
某些makfile-Master大师有什么想法如何处理吗?
谢谢!
解决方法
因为
myHeader.h
没有依赖性,所以一旦存在就永远不会重建。您可以通过创建从ѭ1到虚假目标的依赖项来解决此问题,例如:
forcebuild:
# dummy; do nothing and don\'t create this file
.PHONY: forcebuild
myHeader.h: forcebuild
scriptToBuildMyHeader.sh
但是,这将大大降低您的构建速度,因为每次都需要重新构建标头(以及包括它的任何源文件)。
,麻烦在于,由于myHeader.h
不依赖任何内容,因此它存在并且因此在第二个版本中是最新的。为了确保每次都构建它,它必须依赖于不存在的文件:
myHeader.h: .FORCE
scriptToBuildMyHeader.sh
.FORCE:
名称\'.FORCE
\'(有时是FORCE
)通常使用。
如果使用GNU Make,则可以将“不存在”文件变成伪造目标:
.PHONY: .FORCE
这样做的好处是,即使您运行ѭ11(,(GNU)make
也不会创建文件.FORCE
-这会破坏标头的自动重建,因为该规则取决于实际上不存在文件actually6ѭ。
,这是另一种可能的方法:
all: clean foo.txt
clean:
rm foo.txt
foo.txt:
echo > foo.txt
我在使用echo > foo.txt
模拟标题的创建。