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)/$*.out - > [email protected]
$(DIFF_DIR)/%.dif: $(TESTS_DIR)/%.stdin $(DIFF_DIR)/%.out
cat $< | ./03uzduotis/getfasta - | diff $(DIFF_DIR)/$*.out - > [email protected]
我遇到的问题是,当我启动的makefile,它通过除了最后一个所有测试文件,理由是“没有规则,使所要求Test1.dif‘测试’”
我通过删除一些测试文件来检查它确实死于最后一个文件,而不管哪个文件是最后一个文件。
答
好像在这里这些外来逗号:
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=$(DIFF_DIR)%.dif
时还丢失了)
和缺少/
。可能的一部分是你的问题中的拼写错误,因为不平衡的括号会导致解析错误。
检查“差异”中的“f”的数量。我怀疑你在原始代码中存在拼写错误(因为发布的代码读取“.dif”,但错误消息指的是“.diff”)。 – DevSolar
额外的f就是我的键盘搞乱了。 –
当您询问有关makefile的问题时。请添加所有makefile和文件项目组织。 – Stargateur