在Makefile中不需要的重建



为了避免每次都在Makefile中重建一些对象,应该遵循哪些原则?

我只知道最原始的情况,我们可以将编译分成几个步骤:创建对象模块并链接它们。但在更困难的情况下该怎么办呢?假设我有一组输入文件和预期的输出文件要测试。我想这样做,以便只有在错误输出或更改文件的文件上重新运行测试。

TEST_INPUT_FILES = $(wildcard $(TEST_DIR)/, *in)
TEST_OUTPUT_FILES = $(wildcard $(TEST_DIR)/, *out)

上面展示了我如何为每组文件创建列表。一般来说,我如何确保当一个文件被更改时,测试将通过该文件?关于这个话题的任何建议或文献都会很有用,我自己找不到答案,因为每个人都只拆卸平庸的组装案例

Make使用shell和shell环境中的任何程序从其他文件创建文件,如果目标文件不存在或过期。

你要做的是用Make规则运行测试程序和任何输入文件,包括预期的输出,然后创建一个测试报告文件。如果要重新运行失败的测试,则需要在运行测试之前删除(清除)测试报告。

# Make report from test program and inputs
$(REPORT): $(TEST) $(TEST_INPUT) $(TEST_EXPECTED_OUTPUT)
# Remove old report, if any
rm -f $@
# Run test creating report on success
$^

您也可以通过在.DELETE_ON_ERROR: https://www.gnu.org/software/make/manual/make.html#Special-Targets中添加报告来实现这一点

最新更新