2012-08-29 33 views
2

我在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命令來完成。我是新來makefiles,bash和stackoverflow,所以請忍受我!

感謝

斯蒂芬

回答

1
all: 
    echo $(SOME_VERSION) 

imports: input_file 
    sed -n 's/^#define \([^ ]*\) \("*[^"]*"*\)/\1=\2/p' input_file > imports 

include imports 
+0

謝謝,這個作品真的很好。我必須更改爲'-include imports',否則我會收到_error:imports:沒有這樣的文件或目錄_。即使錯誤導入工作正確,所以錯誤抑制似乎是我可以接受的解決方案。 – sclarke81

+0

我決定使用這個作爲我的解決方案,因爲它會應付對'input_file'的更改。這是因爲它正在使用#define的名稱。我的#define的名稱是固定的,但是可以添加新的#define。直到看到@perreal的解決方案和@Beta – sclarke81

0
VARS := $(shell sed -n "s/^\#define .* //p" filename) 

A = $(word 1, $(VARS)) 
B = $(word 2, $(VARS)) 
+0

,我沒有考慮過這種情況,這對我來說並不合適。我想這是因爲我錯過了我的問題。當'SOME_STRING'爲空時,我會收到_unexpected EOF,同時尋找匹配的'''_。我已經更新了這個問題以包含這種情況。 – sclarke81