2012-08-29 3 views
2

저는 Windows에서 make를 사용하고 있는데, makefile에서 변수로 사용할 값을 두 개 읽고 싶습니다. 내 메이크 파일에서 두 변수와 끝까지 싶습니다파일에서 값을 변수로 읽어들입니다.

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

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

/* A comment */ 
#define SOME_VERSION 01.01a01 

:

나는 다음 행을 포함하는 파일이 있습니다. 하나는 ABCDE으로 설정되고 다른 하나는 01.01a01으로 설정됩니다.

이것은 makefile에서 from이라는 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

관련 문제