我想在我的Makefile中构建一个像这样的规则:
log: test_A test_B
./test_A >> $@
./test_B >> $@
Run Code Online (Sandbox Code Playgroud)
但是test_A
并且test_B
是$(TESTS)
变量的一部分.
那么,是否可以为GNU/make中的每个先决条件执行一个操作(这里:调用程序)?
注意:如何使makefile规则执行其先决条件?没有完全解决这个问题,因为目标log
是必需的(make log
).
Joh*_*all 19
基本上你想要遍历先决条件.显而易见的方法就是向shell发展:
log: test_A test_B
for f in $^; do ./$$f; done
Run Code Online (Sandbox Code Playgroud)
或者您可以将循环编写为GNU Make foreach
循环,但您必须小心,循环体所产生的命令出现在单独的行(via define
)上或以shell终止符(即分号)结束,这更容易):
log: test_A test_B
$(foreach f,$^,./$(f);)
Run Code Online (Sandbox Code Playgroud)
最后,在这种情况下,您可以更简洁,更模糊地编写它作为要循环的每个项目的模式替换:
log: test_A test_B
$(patsubst %,./%;,$^)
Run Code Online (Sandbox Code Playgroud)
(我确定你可以根据需要添加输出重定向和$(TESTS)
变量.)