Makefile在最后一个文件上失败

Makefile在最后一个文件上失败,makefile,Makefile,我正在尝试使用一个makefile为我的另一个程序做一些测试 DIFF=$(TXT_FILES:$(TESTS_DIR)/%.txt=$(DIFF_DIR)/%.dif), $(STDIN_FILES:$(TESTS_DIR/%.stdin=$(DIFF_DIR)%.dif) $(DIFF_DIR)/%.dif: $(TESTS_DIR)/%.txt $(DIFF_DIR)/%.out ./03uzduotis/getfasta $< | diff $(DIFF_DIR)/$*.

我正在尝试使用一个makefile为我的另一个程序做一些测试

DIFF=$(TXT_FILES:$(TESTS_DIR)/%.txt=$(DIFF_DIR)/%.dif), $(STDIN_FILES:$(TESTS_DIR/%.stdin=$(DIFF_DIR)%.dif)

$(DIFF_DIR)/%.dif: $(TESTS_DIR)/%.txt $(DIFF_DIR)/%.out
    ./03uzduotis/getfasta $< | diff $(DIFF_DIR)/$*.out - > $@

$(DIFF_DIR)/%.dif: $(TESTS_DIR)/%.stdin $(DIFF_DIR)/%.out
    cat $< | ./03uzduotis/getfasta - | diff $(DIFF_DIR)/$*.out - > $@
DIFF=$(TXT\u文件:$(TESTS\u DIR)/%.TXT=$(DIFF\u DIR)/%.dif),$(STDIN\u文件:$(TESTS\u DIR/%.STDIN=$(DIFF\u DIR)%.dif)
$(DIFF_DIR)/%.dif:$(TESTS_DIR)/%.txt$(DIFF_DIR)/%.out
/03uzduotis/getfasta$<| diff$(diff_DIR)/$*.out->$@
$(DIFF_DIR)/%.dif:$(TESTS_DIR)/%.stdin$(DIFF_DIR)/%.out
cat$<|/03uzduotis/getfasta-| diff$(diff|u DIR)/$*.out->$@
我遇到的问题是,当我启动makefile时,它会遍历除最后一个之外的所有测试文件,引用“没有规则使Test1.dif成为“tests”所需的


通过删除一些测试文件,我检查了它是否确实会在最后一个文件上消失,无论哪个文件是最后一个文件。

这里似乎有一个无关的逗号:

DIFF=$(TXT_FILES:$(TESTS_DIR)/%.txt=$(DIFF_DIR)/%.dif), $(STDIN_FILES:$(TESTS_DIR/%.stdin=$(DIFF_DIR)%.dif)
$(DIFF)
看起来像是
ddir/one.dif ddir/two.dif,ddir/stdin1.dif
中间的文件名中确实有一个逗号作为名称的一部分。Make中的列表用空格分隔,而不是逗号

我怀疑您的错误消息不准确,因为根据您的示例,所有文件名都应该以
$(DIFF_DIR)/
作为前缀,并且逗号也是错误消息


在替换
$(TESTS_DIR/%.stdin=$(dif_DIR)%.dif
)中也有一个缺少的
和一个缺少的
/
。这可能是问题中的一个输入错误,因为不平衡的括号会导致分析错误。

检查“DIFF”中的“f”的数量。我怀疑您在原始代码中有一个输入错误(正如发布的代码显示为“.dif”,但错误消息指的是“.diff”)。那个额外的f就是我的键盘弄乱了。当你问关于makefile的问题时。请添加所有makefile和项目组织文件。欢迎使用堆栈溢出。准备a是一项重要的编码技能,在这里帮助很大。你已经做到了一半,现在只需将测试文件列表减少到一个文件,就可以消除%.dif规则hink是不必要的,给我们完整(小)的图片。