2013-03-16 2 views
1

나는 GNU make가 망가 졌다고 생각하기 시작했다. 그 행동은 예측할 수없는 것처럼 보입니다. 나는 그것에 대한 상을 수여합니까?

내 명령 섹션에서 원치 않는 출력을 억제하기 위해 '@'문자를 사용했습니다. 하나의 makefile에서 필자는 원하는 것을하고 있는지 확인하기 위해 '@'를 하나의 실행에 대해 제거했습니다. 내가 뒷면에 '@'의를 넣어 때문에, 나는 쉘 오류를 받고 있어요 :
@mkdir을 : 어떤 세계

를 찾을 수없는 약 것을입니까? '@'가 표준 명령 수정 자로 인식되지 않게하려면 어떻게해야합니까?

Grrrr! 나는 그 potto를 싫어한다! (GNU make로 프로젝트 관리의 표지에서)더 많은 GNU make : 셸 (기본값 =/bin/sh)이 "@mkdir : not found"라는 말을 시작할 수 있습니까?

+3

'Makefile'의 관련 스 니펫을 게시 할 수 있습니까? –

+1

'@ mkdir'이있는 줄 앞에 줄 끝 부분에 백 슬래시를 삽입 했습니까? FYI : make가 무엇을하고 있는지 확인하는 또 다른 방법은'make "SHELL = sh -x"target "을 사용하는 것입니다. 쉘은'@'로 시작하더라도 실행 된 모든 명령을 출력합니다. –

+0

Reinier가 가장 가능성이 높은 답변이 있습니다. 또한 이것을하기위한 더 간단한 방법은'V : = @'와 같은 변수를 설정 한 다음'@'대신에'$ V'를 규칙에 사용하는 것입니다. 이제 당신이 방금 실행 한 규칙을보고 싶을 때''@ '를 제거하기 위해 V ='를 만든다. GNU make의 다음 릴리즈에는'@'을 끌 수있는 추적 플래그가 있습니다. – MadScientist

답변

0

@ 문자는 make가 실행하는 행의 시작 부분에서만 유효합니다. 이전 줄이 끝나는 \과 같은 연속 문자가있는 경우 make에 의해 실행되지 않고 쉘에 의해 실행됩니다. 쉘은 @ 부호로 무엇을해야할지 모르기 때문에 오류가 발생합니다.

또한 .ONESHELL을 사용하는 경우 명령 접두어는 모든 행이 하나의 쉘로 전달되어 실행되기 때문에 오류가 발생합니다.

다른 접두사 연산자 (-)에도 동일한 규칙이 적용됩니다.