我有一个简单的问题,关于如何在.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,这无济于事。
答案 0 :(得分:0)
您似乎正在使用GNU Make。
我们假设CONFIG_a
,CONFIG_b
,CONFIG_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.
要了解其工作原理,请参阅: -