如何从文件中写入/读取变量并使用Makefile进行解析?

时间:2016-03-08 10:43:09

标签: gcc makefile gnu-make nmake

如何使用带有GNU Make的Windows中的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);

1 个答案:

答案 0 :(得分:0)

您似乎拥有类似Unix环境的Windows文件系统。所以假设 你有sed命令,你可以这样做:

<强>生成文件

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;

设置一些非默认值:

$ 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的不同定义,否则没有定义。

此makefile将容忍标点符号:;之前的空格