无法在Makefile中读取.config参数

时间:2017-06-25 06:00:48

标签: makefile

我有一个简单的问题,关于如何在.config文件中设置varibale中的makefile。

例如我将CONFIG_a = y CONFIG_b和CONFIG_c作为我的linux配置的.config中的三个变量。我有一个Makefile,它应该根据CONFIG_X的设置来定义一个变量

MOVE "%%~G" C:\Documentaries >nul

我怎样才能在make文件中实现这一点。

我试过

if CONFIG_A
DFLAGS=-DABC
if CONFIG_B
DFLAGS=-DBCD
if CONFIG_C
DFLAGS=-DCDE

每次都设置-DCDE,这无济于事。

1 个答案:

答案 0 :(得分:0)

您似乎正在使用GNU Make。

我们假设CONFIG_aCONFIG_bCONFIG_c中只有一个必须设置foo.config中,通过以下形式的一行:

CONFIG_(a|b|c)\s*=\s*y

其中\s*表示 0或更多空格

然后您可以解析设置并有条件地设置DFLAGS,如下所示: -

<强>生成文件

CONFIG := $(filter CONFIG%=y,$(shell tr -d ' ' < foo.config))
ifneq ($(words $(CONFIG)),1)
$(error Exactly one CONFIG_? must be set)
endif
ifeq ($(CONFIG),CONFIG_a=y)
DFLAGS:=-DABC
endif
ifeq ($(CONFIG),CONFIG_b=y)
DFLAGS=-DBCD
endif
ifeq ($(CONFIG),CONFIG_c=y)
DFLAGS=-DCDE
endif
$(info CONFIG=$(CONFIG))

.PHONY: all

all:
    @echo DFLAGS=$(DFLAGS)

使用:

foo.config(1)

CONFIG_a = y
CONFIG_b
CONFIG_c

你会得到:

$ make
CONFIG=CONFIG_a=y
DFLAGS=-DABC

使用:

foo.config(2)

CONFIG_a = n
CONFIG_b=y
CONFIG_c

你会得到:

$ make
CONFIG=CONFIG_b=y
DFLAGS=-DBCD

使用:

foo.config(3)

CONFIG_a = y
CONFIG_b
CONFIG_c=y

你会得到:

$ make
Makefile:3: *** Exactly one CONFIG_? must be set. Stop.

并且:

foo.config(4)

CONFIG_a = n
CONFIG_b
CONFIG_c

再次:

$ make
Makefile:3: *** Exactly one CONFIG_? must be set. Stop.

要了解其工作原理,请参阅: -