Makefile - 为什么这个sub-make不起作用?

时间:2017-07-19 13:26:53

标签: makefile

我正在寻找解释为什么sub-make不能按预期工作的原因。我需要sub-make,因为在将文件复制到目标目录之前我需要运行一些检查。

以下作品,但我没有空间在复制前进行检查:

SRC_DIR=../src/
TRG_DIR=../../../trg/

target1.PREREQUISITES = file11.sth file12.sth file13.sth
target2.PREREQUISITES = file21.sth file22.sth file23.sth

copyToLocalTraining : $(TRG_DIR)file21.sth
        @echo $(SRC_DIR)file21.sth
        @echo $(TRG_DIR)file21.sth

$(TRG_DIR)% : $(SRC_DIR)%
        @echo cp -fp $^ $@
        @echo ls -ltr $? $@


.IGNORE:
.SUFFIXES: .sfx .sth

以下内容不起作用:

SRC_DIR=../src/
TRG_DIR=../../../trg/

target1.PREREQUISITES = file11.sth file12.sth file13.sth
target2.PREREQUISITES = file21.sth file22.sth file23.sth

copyToLocalTraining :
        @echo "My Checks Here"
        $(MAKE) $(TRG_DIR)file21.sth

$(TRG_DIR)% : $(SRC_DIR)%
        @echo cp -fp $^ $@
        @echo ls -ltr $? $@


.IGNORE:
.SUFFIXES: .sfx .sth

没有规则来制作目标../../../ trg / file21.sth

我正在介绍一个中间步骤,看看我是否正常工作,但事实并非如此:

SRC_DIR=../src/
TRG_DIR=../../../trg/

target1.PREREQUISITES = file11.sth file12.sth file13.sth
target2.PREREQUISITES = file21.sth file22.sth file23.sth

copyToLocalTraining :
        @echo "My Checks Here"
        $(MAKE) intermediateStep

intermediateStep : $(TRG_DIR)file21.sth

$(TRG_DIR)% : $(SRC_DIR)%
        @echo cp -fp $^ $@
        @echo ls -ltr $? $@


.IGNORE:
.SUFFIXES: .sfx .sth

我得到:没有规则来制作目标intermediateStep

1 个答案:

答案 0 :(得分:0)

我找到了原因。我的测试makefile被命名为maketest1maketest2maketest3。我错误地认为默认情况下$(MAKE)正在对自己进行递归调用,但实际上它正在寻找一个名为makefile的文件。要解决这个问题,我必须获取当前makefile的名称,并将其作为-f参数传递给$(MAKE)。为了获得名称,我现在正在设置一个新变量,我在测试makefile的最开头调用THISMAKEFILE,然后将其传递给$(MAKE)。所以最终版本如下。请注意,分配是:=而不是=

THISMAKEFILE:=$(lastword $(MAKEFILE_LIST))

SRC_DIR=../src/
TRG_DIR=../../../trg/

target1.PREREQUISITES = file11.sth file12.sth file13.sth
target2.PREREQUISITES = file21.sth file22.sth file23.sth

copyToLocalTraining :
        @echo "My Checks Here"
        $(MAKE) -f $(THISMAKEFILE) $(TRG_DIR)file21.sth

$(TRG_DIR)% : $(SRC_DIR)%
        @echo cp -fp $^ $@
        @echo ls -ltr $? $@


.IGNORE:
.SUFFIXES: .sfx .sth
相关问题