【问题标题】:Can I make a makefile abort outside of a rule?我可以在规则之外使生成文件中止吗?
【发布时间】:2017-12-31 05:15:32
【问题描述】:

在我的 Makefile 顶部,在任何规则之前,我有以下内容:

ifeq ($(ENVIRONMENT),LOCAL)
    TARGET := local_target
else
    TARGET := hello
endif

如果ENVIRONMENT 环境变量未设置,或者设置为LOCAL 以外的值,而不是将TARGET 设置为hello,我希望makefile 停止并以-1 退出。

我可以这样做吗?当我将TARGET := hello 更改为exit -1 时,出现以下错误:

Makefile:4: *** missing separator.  Stop.

我怎样才能做到这一点??

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    exit是一个shell命令,所以你可以使用Makefile中的shell assignment operator(即:!=)来调用exit

    TARGET != exit -1
    

    这实际上相当于:

    TARGET := $(shell exit -1)
    

    再次注意,这调用了一个 shell,它依次运行 shell 的内置 exit,即:它不会退出 make。在处理 makefile 时退出的典型方法是调用 GNU Make 的 error 内置函数:

    $(error Error-message-here)
    

    把所有东西放在一起:

    ifeq ($(ENVIRONMENT),LOCAL)
     TARGET := local_target
    else # indent with spaces, not a tab
     $(error ENVIRONMENT not set to LOCAL)
    endif
    

    【讨论】:

    • 提示:不要在$(error .....)前加tab,否则make会报错recipe commences before first target。要么根本不缩进,要么用空格缩进。
    • @harmic 非常感谢。我想在当前编辑中使用单个空格缩进$(error ...) 会阻止读者使用制表符。为了保持一致性,我在变量赋值中保留了相同的缩进,即使它没有遇到这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2012-02-07
    • 2013-04-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多