2016-03-08 947 views
1

如何使用GNU Make在Windows中使用Makefile从配置文件读取或读取变量?如何从文件写入/读取变量并使用Makefile解析?

构建配置在Makefile的内容: FLAGS_ARCH: X64; FLAGS_TYPE: RELEASE;

FILE_CONFIG  = `cat c:\\build.config` 
#FLAGS_ARCH  = 
#FLAGS_TYPE  = 

SET: 
    #how to set? 

GET: 
    @echo ARCH: $(FLAGS_ARCH); TYPE: $(FLAGS_TYPE); 

回答

0

你似乎有一个类Unix环境中的Windows文件系统。因此,假如 你有sed命令,你可以这样做,像这样:

的Makefile

FILE_CONFIG := build.config 

.PHONY: SET GET 

SET: FLAGS_ARCH ?= X64 
SET: FLAGS_TYPE ?= RELEASE 
SET: 
    @echo "FLAGS_ARCH: $(FLAGS_ARCH); FLAGS_TYPE: $(FLAGS_TYPE);" > $(FILE_CONFIG) 


GET: CONFIG = $(shell sed -e 's/://g' -e 's/;//g' $(FILE_CONFIG)) 
GET: FLAGS_ARCH = $(word 2,$(CONFIG)) 
GET: FLAGS_TYPE = $(word 4,$(CONFIG)) 
GET: 
    @echo "ARCH: $(FLAGS_ARCH); TYPE: $(FLAGS_TYPE);"; 

设置默认值:

$ make SET 

得到什么,我们只是设置:

$ make GET 
ARCH: X64; TYPE: RELEASE; 

Set s青梅非默认:

$ make SET FLAGS_ARCH=i386 FLAGS_TYPE=DEBUG 

让他们:

$ make GET 
ARCH: i386; TYPE: DEBUG; 

你可以没有sed,只是使用catmake text-functions, 但它需要更多的繁琐程序。

在这个makefile中,FLAGS_ARCHFLAGS_TYPEtarget-specific variables。 它们每个都有一个目标定义SET,另一个定义为目标GET,否则没有定义。

此生成文件会容忍空间中的标点符号和:;

前述