在没有目标的Makefile中运行表达式(没有编译文件)?

时间:2017-10-02 15:28:25

标签: makefile

我想测试一些运行我在某处读取的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中测试这样的表达式?我是否需要定义默认目标?如何格式化命令(用制表符或空格缩进,或者根本不缩进?)

1 个答案:

答案 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"最后打印(?!),但是当它们没有缩进(或用空格缩进)时,则首先打印它(按照文件中的顺序)。