我想定义一个 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 (,$(findstring n,$(MAKEFLAGS)))
TESTTOOL=: TESTTOOL
endif
foo: bar
${TESTTOOL} foo baz
ifneq…endif
块在命令行上检查-n
标志,并将TESTTOOL
的扩展名设置为: TESTTOOL
,这易于阅读并且可以安全执行。最好的解决方案是将Shell函数转换为实际程序(如果您可以选择这样做)。