Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 递归运行make后更新时间戳_Makefile - Fatal编程技术网

Makefile 递归运行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

我的项目依赖于子文件夹中的其他项目。我想递归地调用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 submake2
这不符合预期。如果这些项目中的文件发生了更改,则每次运行make和submake都会执行。对于submake2,如果submake2/lib被更新,我的程序也会重建。若只更新了submake1/lib,我必须再次运行make来更新程序


原因是make在make_递归之前获取submake1/lib的时间戳,但之后不会更新它。如何改进这一点?

为什么您有一个单独的
make\u递归
目标?如果我将递归make放在submakex/lib的规则中,它将在lib文件不存在时运行。但如果库的源文件被更新,它将不会运行,因为库是旧的。因此,每次运行时,我都必须运行recursive make,以检查它们是否有更新的源文件。使用非recursive make可以实现同样的效果,下面是现成的解决方案:您的意图并不完全清楚,但为了简单起见,递归地使用make会牺牲很多依赖项跟踪功能。如果这是你想要的,我们可以解决其中的一些问题。