2011-01-26 3 views
2

nmake.exe은 하나의 누락 된 파일에 대한 추론 규칙 검색을 제한했습니다. 나는 웹상에서 그 문제에 대한 언급을 찾지 못했다. 내가 놓친 게 있니?nmake 추론 규칙은 1의 깊이로 제한됩니다.

 
$ cat Makefile 
.SUFFIXES: .a .b .d .e 

all: abc.e 

.a.b: 
     copy $** [email protected] 

.b.d: 
     copy $** [email protected] 

.d.e: 
     copy $** [email protected] 

$ touch abc.a 

$ nmake 
NMAKE : fatal error U1073: don't know how to make 'abc.e' 
Stop. 

$ nmake -n abc.a 
'abc.a' is up-to-date 

$ nmake -n abc.b 
     copy abc.a abc.b 

$ nmake -n abc.d 
NMAKE : fatal error U1073: don't know how to make 'abc.d' 
Stop. 

이 같은 메이크 GNU 메이크업으로 다음 TBE를 생성합니다

물론
$ make -n 
copy abc* abc.b 
copy abc* abc.d 
copy abc* abc.e 
rm abc.b abc.d 

, 매크로 $**copy 명령을 만들 GNU와 같이 유용하지 않습니다. ;-)

귀하의 버전이 nmake.exe이면 더 좋게 처리됩니까? 마술 스위치가 있습니까? 아니면 보이는 것처럼 정말 망가 졌습니까?

답변

3

여기서 문제는 빌드 프로세스에서 다단계 작업을 추적하는 것입니다. 소스 파일은 최종 빌드 출력을 생성하는 일종의 중간 파일을 생성합니다. 불량한 우주에서는 원본 파일을 변경 한 다음 중간 파일의 오래된 버전에서 최종 바이너리를 빌드 할 수 있습니다. 분명히, 그것은 나쁠 것입니다.

GNU make는 전체 종속성 트리를 한 번에 모델링하고 수정 된 파일을 출력까지 추적하는 접근 방식을 사용합니다. make가 유일하게 사용하는 빌드 도구 인 경우이 방법이 유용합니다. 매우 큰 프로젝트가있는 경우에는 제대로 작동하지 않으므로 특정 순서로 프로젝트를 작성해야합니다. 'make'가 빌드 프로세스의 일부 도구를 지원하지 않으므로이 방법은 잘 작동하지 않으므로 여러 번 make를 실행해야합니다.

nmake.exe는 가능한 한 간단한 작업을 수행합니다. 한 번에 하나의 패스 만 수행합니다. 이 도구는 더 큰 도구 체인의 일부가 될 것이라고 가정합니다. 따라서 다중 패스 종속성이 있다면 nmake를 여러 번 통과해야합니다. 빌드 프로세스에 3 번 이상 통과해야하는 경우, 아마도 A Bad Thing을 수행하고 있으며 프로세스를 수정해야합니다. 큰소리로 외치기 위해 여러 번 패스가 필요한 경우 스크립트를 작성하여 수행하십시오.