Makefile 递归运行make后更新时间戳
我的项目依赖于子文件夹中的其他项目。我想递归地调用make,以便在一次运行中构建所有功能 我的第一次尝试是这样的:Makefile 递归运行make后更新时间戳,makefile,Makefile,我的项目依赖于子文件夹中的其他项目。我想递归地调用make,以便在一次运行中构建所有功能 我的第一次尝试是这样的: .PHONY: all make_recursion all: program program: submake1/lib submake2/lib submake1/lib: make_recursion submake2/lib: make_recursion make_recursion: make -C submake1 make -C subma
.PHONY: all make_recursion
all: program
program: submake1/lib submake2/lib
submake1/lib: make_recursion
submake2/lib: make_recursion
make_recursion:
make -C submake1
make -C submake2
这不符合预期。如果这些项目中的文件发生了更改,则每次运行make和submake都会执行。对于submake2,如果submake2/lib被更新,我的程序也会重建。若只更新了submake1/lib,我必须再次运行make来更新程序
原因是make在make_递归之前获取submake1/lib的时间戳,但之后不会更新它。如何改进这一点?为什么您有一个单独的
make\u递归
目标?如果我将递归make放在submakex/lib的规则中,它将在lib文件不存在时运行。但如果库的源文件被更新,它将不会运行,因为库是旧的。因此,每次运行时,我都必须运行recursive make,以检查它们是否有更新的源文件。使用非recursive make可以实现同样的效果,下面是现成的解决方案:您的意图并不完全清楚,但为了简单起见,递归地使用make会牺牲很多依赖项跟踪功能。如果这是你想要的,我们可以解决其中的一些问题。