如何强制gnumake文件中的错误

Wil*_*mKF 57 makefile gnu-make

我想在我的makefile中检测一个工具是错误版本的条件,并强制make失败,并显示一条错误消息,指出该项目不是正确的版本.

谁能举个例子呢?

我尝试了以下但是它不是正确的语法:

ifeq "$(shell svnversion --version | sed s/[^0-9\.]*://)" "1.4"
$error("Bad svnversion v1.4, please install v1.6")
endif
Run Code Online (Sandbox Code Playgroud)

谢谢.

Lir*_*una 73

手册:

$(error Bad svn version v1.4, please install v1.6)
Run Code Online (Sandbox Code Playgroud)

这将导致make致命错误:

$ make
Makefile:2: *** Bad svn version v1.4, please install v1.6.  Stop.
Run Code Online (Sandbox Code Playgroud)

  • 小陷阱:如果在配方之外,`$` 之前不能有空格 (5认同)
  • 当与 shell 条件一起使用时,这似乎不起作用。 (3认同)
  • 作为旁注,我想输出多行错误消息.为此,你可以`定义err_mesg =你的多行错误消息... endef`,然后,`$(错误$(err_mesg))`.Make将保留并输出`err_mesg`. (2认同)

Chr*_*odd 9

而$(错误...有效,有时更容易使用失败的规则

test_svn_version:
        @if [ $$(svn --version --quiet | \
                perl -ne '@a=split(/\./); \
                          print $$a[0]*10000 + $$a[1]*100 + $$a[2]') \
              -lt 10600 ]; \
        then \
            echo >&2 "Svn version $$(svn --version --quiet) too old; upgrade to v1.6";
            false; \
        fi
Run Code Online (Sandbox Code Playgroud)

然后,使test_svn_version成为顶级目标的先决条件.


Bet*_*eta 5

条件也需要一些关注.

ifeq ($(shell svnversion --version | sed s/[^0-9\.]*://), 1.4) 
    $(error Bad svnversion v1.4, please install v1.6)
endif 

  • 要使用它,我无法将 $(error ...) 选项卡插入。 (3认同)