Makefile 命令失败时如何中止生成文件?
在开始编译之前,我想检查是否有第三方库可用。使用Makefile 命令失败时如何中止生成文件?,makefile,gnu-make,Makefile,Gnu Make,在开始编译之前,我想检查是否有第三方库可用。使用pkg config很容易,但我想要一条比以下更好的错误消息: pkg-config gtk+-3.0 make: *** [Makefile:17: gtk+-3.0] Error 1 在阅读了这里的一些答案后,我发现了一个令人满意的代码: gtk+-3.0: $(shell pkg-config $@) ifneq ($(.SHELLSTATUS),0) $(error $@ is not installed)
pkg config
很容易,但我想要一条比以下更好的错误消息:
pkg-config gtk+-3.0
make: *** [Makefile:17: gtk+-3.0] Error 1
在阅读了这里的一些答案后,我发现了一个令人满意的代码:
gtk+-3.0:
$(shell pkg-config $@)
ifneq ($(.SHELLSTATUS),0)
$(error $@ is not installed)
endif
但错误总是被触发的
如果我将$(错误)
替换为echo
我有一个语法错误:
ifneq (0,0)
/bin/sh: -c: line 0: syntax error near unexpected token `0,0'
/bin/sh: -c: line 0: `ifneq (0,0)'
make: *** [Makefile:3: gtk+-3.0] Error 1
archlinux上的GNU Make 4.2.1。当命令失败时,Make已经停止。只要写
gtk+-3.0:
pkg-config $@
或者为了更好地控制信息
gtk+-3.0:
@if pkg-config $@; then \
printf '%s\n' "All good!"; \
else \
printf '%s\n' "Not installed." >&2; \
exit 1; \
fi
注意make总是使用bourneshell(可能是/bin/sh
),因此对于简单的命令不需要$(shell)
。使用make条件也不像您预期的那样。GNU make手册提供了所有详细信息 Make在命令失败时已经停止。只要写
gtk+-3.0:
pkg-config $@
或者为了更好地控制信息
gtk+-3.0:
@if pkg-config $@; then \
printf '%s\n' "All good!"; \
else \
printf '%s\n' "Not installed." >&2; \
exit 1; \
fi
注意make总是使用bourneshell(可能是
/bin/sh
),因此对于简单的命令不需要$(shell)
。使用make条件也不像您预期的那样。GNU make手册提供了所有详细信息 我不理解$(shell…
在这里的用法。只需使用pkg config$@
作为命令,并删除ifneq…
内容。对不起,我忘记了问题的一部分:“使用用户可以理解的消息中止”。我不理解$(shell…
这里。只需使用pkg config$@
作为命令,并删除ifneq…
内容。对不起,我忘记了问题的一部分:“使用用户可以理解的消息中止”。