2016-03-08 38 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,否則沒有定義。

此生成文件會容忍空間中的標點符號和:;

前述