make:为每个先决条件执行操作

时间:2011-10-27 15:41:07

标签: makefile

我想在我的Makefile中建立一个像这样的规则:

log: test_A test_B
    ./test_A >> $@
    ./test_B >> $@

test_Atest_B$(TESTS)变量的一部分。

那么,是否可以为GNU / make中的每个先决条件执行一个操作(这里:调用程序)?

注意:How do I make a makefile rule execute its prerequisites?并未完全解决此问题,因为目标log是必需的(make log)。

1 个答案:

答案 0 :(得分:19)

基本上你想循环先决条件。这样做的显而易见的方法就是向shell发展:

log: test_A test_B
        for f in $^; do ./$$f; done

或者您可以将循环编写为GNU Make foreach循环,但您必须小心,循环体所产生的命令会出现在单独的行上(通过define)或用shell终结符终止(即分号,这更容易):

log: test_A test_B
        $(foreach f,$^,./$(f);)

最后,在这种情况下,您可以更简洁,更隐晦地编写它作为每个要循环的项目的模式替换:

log: test_A test_B
        $(patsubst %,./%;,$^)

(我确信您可以根据需要添加输出重定向和$(TESTS)变量。)