2012-09-21 4 views
3

내 휴면 파일에 고정 정지 점이 정의되어 있습니다. 내 Makefile을 사용하면서 awk의 출력을 사용하여이 변수를 설정하려고합니다.awk를 사용하여 makefile 변수를 동적으로 설정합니다.

stoppoint = $(awk '$$2 ~ /main/ {print $$1}' file) 
stoppoint = "$(awk '$$2 ~ /main/ {print $$1}' file)" 
stoppoint = 'awk '$$2 ~ /main/ {print $$1}' file' 
awk '$$2 ~ /main/ {print $$1}' file > stoppoint 
awk '$$2 ~ /main/ {print $$1}' file > $(stoppoint) 

그러나,이 변수를 설정할 수 없습니다입니다 : 두 번째 인수는 주요인지

내가 시도하는 경우

내가보고 싶어요. 하나는 메이크

PS 내부 AWK 사용하여 변수를 설정하는 방법 이 친절하게 말해 : 명령 행에서 awk 명령은 나에게 내가 원하는 출력 ...

감사합니다, 테자스

+1

Makefile의 각 행이 새로운 쉘을 호출한다는 것이 문제라고 생각됩니다.따라서 한 줄에 변수를 할당하면 해당 변수가 새 쉘에서 실행되므로 다음 줄에 변수가 정의되지 않습니다. –

+0

은 합리적인 추론을 보인다! 나는 그것을 시도 할 것이다. 감사합니다 :) –

답변

1

용액 간단 메이크

대상의 형식을 가정 : 종속성 상기 경우에 TAB

후에 동작하여 다음 라인에 따라 TAB 다음에 변수를 설정할 수 없습니다. 왜냐하면 그 변수가 동작이라고 가정하기 때문입니다. TAB을 제거하고 설정하십시오. 문제

4

당신을 제공합니다

all: 
    @a=`echo "hello world!!" | awk '{print $0;}' -`; echo $$a; 
+0

안녕하세요, 작동하지 않습니다 : (나는 사용 : @ a ='awk '$$ 2 ~/main/{print $$ 1;}'파일'; echo $$ a. , 내가 이전에 = 0으로 정의 할 때. 정의하지 않을 때, 그것은 여전히 ​​실패합니다. (. 프랑스어 인용 부호, ofcourse. –

+0

그것은 나를 위해 일한 \ awk '...'파일 \'. 우분투에서 bash를 사용하고 있습니다. 파일 예제와 원하는 출력을 줄 수 있습니까? – arutaku

+1

Makefile 내부에서하고 있습니까? 1. "$ 1"을 사용할 수없고, $$ 1 등을 사용해야합니다. 2. 그렇지 않습니다. 변수를 동적으로 설정하는 방법 Makefile에서 변수를 동적으로 설정하는 절차는 무엇입니까? –

0

이 지금 내가 할 방법은 다음과 같습니다

은 예입니다 (``) 프랑스어 따옴표를 사용해야합니다 : 그것은 나에게

덤프

내부 값 0x60000078를 제공하고 그것을 사용하는

@awk '$$2 ~ /main/ {print $$1}' inputfile > DUMP 

는 :

@echo -e "set pc $(shell cat DUMP)" > testfile 

이 내 문제를 해결하는 것,하지만 누군가가 더 나은 솔루션 날 지점 수 있기를 바랍니다.

감사

테자스

1

를 해결할 는이 같은 eval 구조를 사용해야합니다

eval
.PHONY: default 
default: all 

rule1: 
    $(eval GLOBAL_VAR=`awk '$$2 ~ /main/ {print $$1}' file`) 

all: rule1 
    @echo "The global var is: $(GLOBAL_VAR)" 

은 메이크 구문과 같은 문자열을 평가합니다. 여기서 GLOBAL_VAR 변수를 쉘 함수 호출의 결과로 설정합니다. 그러면 GLOBAL_VAR은 전역 적임을 보여주기 위해 다른 규칙에서 인쇄됩니다. awk를 호출 할 때이 문제를 해결하기 위해 필요한 무엇

0

처럼, 키워드 shell를 사용했다 :

VARIABLE="$(shell awk '__awk script__' file-awk-processes)" 

는 희망이 도움이!

관련 문제