【问题标题】:Checking for defined variables in makefile macros检查生成文件宏中定义的变量
【发布时间】:2017-03-08 17:26:24
【问题描述】:

我在让 GNU Makefile 宏按我希望的方式工作时遇到了一些麻烦。这是我的测试:

TEST1 = defined
#TEST2 = defined

define add_ext
ifndef $(1)
    $(error $(1) not defined)
endif

$(1)_EXT = $(1).extended
endef

TESTS = TEST1 TESTS2

$(foreach test,$(TESTS),$(eval $(call add_ext,$(test))))

all:
    @echo TEST1: $(TEST1), $(TEST1_EXT)
    @echo TEST2: $(TEST2), $(TEST2_EXT)

宏应该接受一个变量的名称,宏首先检查它是否已经定义,然后创建一个关联的变量。

鉴于我已注释掉 TEST2,我预计这会在 TEST2 上失败。但这是错误信息:

Makefile:15: *** TEST1 not defined.  Stop.

这与 Buildroot 在其 Makefile 中所做的非常相似: https://git.buildroot.net/buildroot/tree/package/pkg-generic.mk#n409

有人知道我的麻烦在哪里吗?

【问题讨论】:

    标签: makefile macros gnu-make


    【解决方案1】:

    您需要在宏定义中转义 make-functions,即

    define add_ext
    ifndef $(1)
    $$(error $(1) not defined)
    endif
    
    $(1)_EXT = $(1).extended
    endef
    

    另外,在你的:

    ifndef $(1)
        $(error $(1) not defined)
    endif
    

    我不知道$(error ...) 是按制表符还是空格缩进的,但它 不能使用制表符缩进,所以最好不要缩进。

    【讨论】:

    • 哎呀,它必须是那么简单。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多