【问题标题】:How to write/read variables from files and parse using Makefile?如何从文件中写入/读取变量并使用 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);

【问题讨论】:

    标签: gcc makefile gnu-make nmake


    【解决方案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 将允许标点符号 :; 之前的空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多