如何在Makefile中使用exit控件分离不同的部分
我正在编写一个复杂的Makefile,它包含多个部分,如:如何在Makefile中使用exit控件分离不同的部分,makefile,Makefile,我正在编写一个复杂的Makefile,它包含多个部分,如: step1: if [[ ${input} == "delete" ]]; then \ echo "this is a test to delete files"; \ else \ echo "error stop";
step1:
if [[ ${input} == "delete" ]]; then \
echo "this is a test to delete files"; \
else \
echo "error stop"; \
fi
step2:
rm -f *.txt
test:
make step1
make step2
因此,如果我输入“maketestinput=delete”,它将删除所有的.txt文件。如果我输入“maketestinput=none”,它将不会做任何事情。我知道最简单的方法是将步骤1和步骤2组合为:
test:
if [[ ${input} == "delete" ]]; then \
echo "this is a test to delete files"; \
rm -f *.txt; \
else \
echo "error stop"; \
fi
但是我的Makefile太复杂了,我不得不分成几个部分。Makefile是否支持类似的功能?如果是,我应该寻找什么?谢谢。在调用子MAKE时,您应该始终使用
$(MAKE)
,而不要直接使用MAKE
如果这样做,那么您提供的所有命令行重写都将正确地传递给子生成器
顺便说一句,您不应该使用bash语法
[[x==y]]
。如果您在默认shell仅限于POSIX标准语法的系统上运行此makefile,那么这将不起作用。您应该使用POSIX语法:[x=y]
当您使用GNU Make时,您可以使用它的条件,例如。
:
测试:
ifeq($(输入),删除)
echo“这是删除文件的测试”
rm-f*.txt
其他的
回显“错误停止”
恩迪夫
或者,如果要控制目标的先决条件:
步骤1:
echo“这是删除文件的测试”
步骤2:
rm-f*.txt
#测试始终取决于步骤1
测试:步骤1
#如果输入=删除,测试也取决于步骤2
ifeq($(输入),删除)
测试:步骤2
恩迪夫
您正在使用GNU Make吗?如果是这样,您可以使用它的ifeq
。是的。我正在使用GNU Make。你能提供一些关于如何使用ifeq
实现它的更多信息吗?谢谢,我明白了。谢谢在这种情况下,这有什么帮助?如果我理解正确,如果我使用make test input=delete
,则步骤1将打印出错误停止,但步骤2仍将执行。这是正确的吗?如果您不想运行步骤2,您可以将echo“error stop”
更改为exit 1
,以便step1
给出错误,那么test
中的其余行在$(MAKE)step1
失败后将不会被调用。