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

Posted

技术标签:

【中文标题】如何从文件中写入/读取变量并使用 Makefile 进行解析?【英文标题】:How to write/read variables from files and parse using Makefile? 【发布时间】:2016-03-08 10:43:09 【问题描述】:

如何在带有 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】:

您似乎有一个带有类 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 将允许标点符号 :; 之前的空格

【讨论】:

以上是关于如何从文件中写入/读取变量并使用 Makefile 进行解析?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 在 .txt 文件中写入、读取和重写

Python:如何从压缩的 json .gz 文件中读取并写入 json 文件

如何从 servlet-filter 写入文件并在 Eclipse 中读取它?

如何从C扩展名(PHP源)读取和写入PHP超全局变量? [处于保留状态]

如何从流中读取 CSV 文件并在写入时处理每一行?

如何在同一循环中“从 .csv 读取并写入 excel”