【问题标题】:Read a value from a file into a variable将文件中的值读入变量
【发布时间】:2012-08-29 14:22:31
【问题描述】:

我在 Windows 中使用 make,我想从文件中读取几个值以用作 makefile 中的变量。

我有一个包含以下行的文件:

/* A comment */
#define SOME_STRING "ABCDE"

/* A comment         "     " */
#define BLANK_STRING "     "

/* A comment */
#define SOME_VERSION 01.01a01

我想在我的 makefile 中得到两个变量。一个设置为 ABCDE,另一个设置为 01.01a01

这也可以使用从 makefile 中调用的一些 bash 命令来完成。我是 makefile、bash 和 stackoverflow 的新手,所以请多多包涵!

谢谢

斯蒂芬

【问题讨论】:

    标签: bash makefile


    【解决方案1】:
    all:
      echo $(SOME_VERSION)
    
    imports: input_file
      sed -n 's/^#define \([^ ]*\) \("*[^"]*"*\)/\1=\2/p' input_file > imports
    
    include imports
    

    【讨论】:

    • 谢谢,这很好用。我必须更改为-include imports,否则我会收到错误:导入:没有这样的文件或目录。即使出现错误,导入工作正常,所以错误抑制对我来说似乎是一个可以接受的解决方案。
    • 我决定使用它作为我的解决方案,因为它可以应对input_file 的更改。这是因为它使用了#define 的名称。我的#define 的名称是固定的,但可以添加新的#define。在看到@perreal 和@Beta 的解决方案之前,我没有考虑过这种情况
    【解决方案2】:
    VARS := $(shell  sed -n "s/^\#define .* //p" filename)
    
    A = $(word 1, $(VARS))
    B = $(word 2, $(VARS))
    

    【讨论】:

    • 这不太适合我。我认为这是因为我错过了我的问题中的一个情况。当SOME_STRING 为空白时,我在寻找匹配的 `"' 时收到意外的 EOF。我已更新问题以包含这种情况。如果未使用空白字符串,这将完美运行。跨度>
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多