2012-08-09 2 views
1

나는 아침 내 머리를 때리는 데 문제가 있습니다. 나는 makefiles를 수정하는 초보자 다. 그래서 나는 해결할 방법을 모른다라는 이슈를 발견했다. 'Findings.txt'로 끝나는 파일의 디렉토리를 검색하려고하는데 'Findings No!'라는 문자열이 있습니다. 그 안에 들어 있습니다. 어떤 이유로 나는 조건문을 제대로 작동시키지 못합니다. 나는 그것이 와일드 카드 문자와 관련이 있을지도 모른다고 가정하고 있지만, 내가 시도한 모든 것은 wilcard 기능을 포함하여 작동하지 않았다. 내 유일한 생각은 셸이 경로의 변수에 문제가있을 수 있다는 것입니다.셸 명령 grep을 사용하는 Makefile

GREP_FINDINGS := $(shell grep 'No Findings' $(C_DIR)/*Findings.txt) 

grep 결과의 출력을 조건부로 지정하려고하지만 잘못된 결과를 나타냅니다. 또한 밖으로 this을 확인 할 수 있습니다

ifeq ($(GREP_FINDINGS),) 
    @echo true 
else 
    @echo false 
endif 

: 당신이 확인 여기에 GNU와 ifeqelse, 다음 작품을 사용할 필요가 있으므로

ifeq ($(GREP_FINDINGS),) 
    @echo "Nothing was found for current build"  
else 
    @echo "***Found string in Findings.txt***" 
endif    
+0

사용중인 Make의 버전은 무엇입니까? (확실하지 않다면'make -v'를 시도하십시오.)'GREP_FINDINGS'는 당신이 생각하는 것을 포함하고 있습니까? 귀하의 조건문은 어떻게 잘못됩니까? 'GREP_FINDINGS'에 무엇인가가있을 때 첫 번째 가지를 취합니까, 아니면 아무것도 없어야 할 때 두 번째 걸리는가? – Beta

+0

유닉스에서 tcsh와 함께 GNU make 3.8을 사용하고 있습니다. 현재 양식에서는 첫 번째 분기를 트리거하지 않으며 항상 두 번째 분기를 사용합니다. 이 조건부에 대해서만 GREP_FINDINGS를 사용하기 때문에 콘솔에 미리 명령을 테스트 할 때 원하는 내용이 포함되어 있다고 가정합니다. 나는 내가 배우는 것처럼 아직도 배우고있다. 나는 문자열이 0이 아닌 elsely를 찾으면 grep은 항상 0 출력을 반환한다고 가정했다. 고마워요! –

+0

유효한 코드로 보이지 않습니다 (예 : 괄호가 균형을 이루지 않음). 실제 코드를 자르고 붙일 수 있습니까? – Beta

답변

1

메이크은 일반적으로 대소 문자를 구분합니다.

+0

메모리에서 휴대폰을 입력하기 전에 실제 코드로 업데이트했습니다. 실제로 조건문을 사용하고 있는데 여전히 첫 번째 가지를 건너 뜁니다. –

+2

@MattCzarniak,이 대답에서'ifeq' 줄을 잘라내어 붙여 넣으십시오. 공간을 생략했다고 생각합니다. – Beta

+0

확인. 나는 그 공간을 알아 차리지 못했다고 믿을 수 없었다. 충분히 흥미로웠다. 나는 그 공간을 추가했다. 그리고 그것은 조건의 첫 번째 가지를 활성화시켰다. 그것은 내가 원하는 일이다. 그러나 grep에 사용 된 문자열을 내 Findings 파일에 포함되어 있지 않은 'blah'로 바꿨고 첫 번째 분기도 반환합니다. Makefile의 다른 곳에서 구문 오류가 발생할 수있는 기회가 있습니까? 웃기는 행동? 모두의 도움을 주셔서 감사합니다 –