我正在寻找解释为什么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
答案 0 :(得分:0)
我找到了原因。我的测试makefile被命名为maketest1
,maketest2
和maketest3
。我错误地认为默认情况下$(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