我想定义一个shell函数
#!/bin/sh
test ()
{
do_some_complicated_tests $1 $2;
if something; then
build_thisway $1 $2;
else
build_otherway $1 $2;
fi
}
这样我就可以在 Makefile 的每条规则中使用它,例如:
foo: bar
test foo baz
需要明确的是,我希望 shell 函数成为 Makefile 的一部分。最优雅的方法是什么?如果你可以在不递归调用 make 的情况下完成它,那就加分了。
背景:
我的实际问题是make -n
产生非常长且不可读的输出。每个规则都使用几乎相同的不可读的 shell 命令序列,并且有很多规则。上述解决方案将使输出make -n
更有用。
该解决方案不依赖于外部临时文件,并且不会强迫您修改SHELL
多变的。
TESTTOOL=sh -c '\
do_some_complicated_tests $$1 $$2; \
if something; then \
build_thisway $$1 $$2; \
else \
build_otherway $$1 $$2; \
fi' TESTTOOL
ifneq (,$(filter n,$(MAKEFLAGS)))
TESTTOOL=: TESTTOOL
endif
foo: bar
${TESTTOOL} foo baz
The ifneq…endif
块检查-n
命令行上的标志并设置扩展TESTTOOL
to : TESTTOOL
它易于阅读且执行安全。
如果您可以选择,最好的解决方案可能是将 shell 函数转换为实际的程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)