2013-10-06 2 views
1

GNU make는 내장 된 규칙 중 일부가 .c 파일을 대상으로하므로 내 작업을 파괴했습니다.GNU Make : 원하는 것을 제외한 모든 내장 규칙을 비활성화하십시오.

foo.cfoo.l Lex 스캐너 또는 foo.y Yacc 파서라는 파일이있는 경우 조심하십시오! GNU make는 .c 파일이 이것들로 만들어진 타겟이라고 가정합니다 (이것은 분명히 POSIX 요구 사항입니다!) mv y.tab.c foo.c 또는 lex -t foo.l > foo.c과 같은 것을 할 것입니다.

숨겨진 위험한 규칙 (알려진 또는 알지 못함)을 유지하면서 유용한 모든 규칙을 비활성화하는 방법은 무엇입니까?

특히 GNU Make에 "(예 :) .c 및 .o 파일과 관련된 모든 규칙을 유지하고 다른 파일 형식과 관련된 모든 규칙을 비활성화하십시오"라는 요청을 어떻게 전달할 수 있습니까? the manual에서

답변

1

: 미리 정의 된 묵시적 규칙의

많은 접미사 규칙으로 메이크업에 구현되어 있으므로 어느 것이 정의 될 것이다 당신이 접미사를 수정하면 ... 접미사 목록에 따라 달라집니다 목록에서 의 사전 정의 된 접미어 규칙은 지정한 목록의 에있는 접미사 중 하나 또는 두 개의 이름이 적용됩니다. 접미어가 목록에없는 규칙은 입니다. 기본 추가 접미사를 으로 추가하는 대신이를 제거하려면 .SUFFIXES에 대한 전제 조건없이 규칙을 작성하십시오. 특별 배포로 인해 .SUFFIXES의 기존 필수 구성 요소가 모두 제거됩니다. 원하는 접미사를 추가하는 다른 규칙을 작성할 수 있습니다.

.SUFFIXES:   # Delete the default suffixes 
.SUFFIXES: .c .o  # Define a new suffix list 
+0

아, 알 수 있습니다. 나는 이미'SUFFIXES'를 시도하고 있었지만,'SUFFIXES : .c .o' 두번째 줄만 가지고 있었고, 그것을 대체하지 않고 세트에 추가했습니다. 감사. – Kaz

+0

또한,'-Rr'을 사용하여 _make_를 호출 할 수 있습니다 (실제로는 그 중 하나만 필요하지만, 보통 잊어 버립니다) – bobbogo