我想测试一些运行我在某处读取的shell命令的ifeq
类型的表达式,所以我写了这个小mymakefile
(所有行都用缩进键缩进):
ifeq ($(shell echo test 2>/dev/null; echo $$?),0)
$(info I am inside)
endif
......我试图运行它:
$ make -f mymakefile
make: *** No targets. Stop.
我如何在自己的makefile中测试这样的表达式?我是否需要定义默认目标?如何格式化命令(用制表符或空格缩进,或者根本不缩进?)
答案 0 :(得分:0)
嗯,我到了某个地方 - 显然,必须指定一个目标;但由于我是make
菜鸟,我很乐意看到更合格的答案。
我发现此链接https://www.gnu.org/software/make/manual/html_node/Conditional-Example.html给了我一个提示..无论如何,现在是mymakefile
:
.PHONY: default default: mytarget; ifeq ($(shell echo test 2>/dev/null; echo $$?),0) $(info I am inside) else $(info I am outside) endif mytarget: \t (TAB) echo A
所以,这里的mytarget
只是一个假人,它只是一个echo A
;运行此打印:
$ make -f mymakefile
I am outside
echo A
A
如果您不希望打印echo A
,请使用符号@echo A
对其进行压制。
echo A
行必须使用TAB缩进 - 否则错误" mymakefile:11: *** missing separator. Stop.
"。
奇怪的是,如果我用TAB缩进两个$(info...
行,那么" I am outside
"最后打印(?!),但是当它们没有缩进(或用空格缩进)时,则首先打印它(按照文件中的顺序)。