以下是上下文:
我正在使用makefile在每次构建时创建一个 .h ,包括另一个将使用此头文件的makefile。我无法编辑第二个。
根据我的文件使用目标 all ,它会在第一次编译时创建缺少的MyHeader.h。问题是,当我重新编译时,标题不会重新生成...
我的makefile如下所示:
all: myHeader.h
myHeader.h:
scriptToBuildMyHeader.sh
include obscureAndPrivateMakefile.make
我也在开始尝试使用.phony目标。相同的结果:一旦创建,它将不会在每次构建时重新生成。
PS:我不能在make之前调用脚本。
有些makfile-Masters有任何想法如何处理?
谢谢!
答案 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
来模拟标题的创建。