누락 된 파일을 처리 할 수있는 makefile 종속성 규칙이 필요합니다.

StackOverflow https://stackoverflow.com/questions/239004

  •  04-07-2019
  •  | 
  •  

문제

우리는 시스템에 GNU를 사용합니다. MakeFiles의 끝에 GCC에서 -mm 스위치를 사용하여 .D 파일을 생성하는 Makedepends라는 포함이 포함되어 있습니다. 그런 다음 포함 $ (cxxfiles : .cc = .d) 줄을 사용하여 각 .cc 파일의 .D 파일을 포함시킵니다. 그러나 파일을 삭제하거나 파일을 이동하면 종속성 단계가 중단되며 .D 파일을 수동으로 삭제해야합니다 (종속성이 실패하기 때문에 Make Clean조차 작동하지 않음).

이러한 종속성 .D 파일을 생성하거나 파일 삭제 또는 재배치를 우아하게 처리 할 종속성 .D 파일을 포함시키는 방법이 있습니까?

편집 : 예를 들어 : serial.cc가 있고 makefiles는 buffer.h에 종속성을 가진 serial.d 파일을 생성하지만 더 이상 버퍼가 필요하지 않도록 변경하고 버퍼를 삭제합니다. 다음에 Make를 실행할 때 Serial.o를 여전히 버퍼에 의존하는 .D 파일이 포함되어 있기 때문에 질식합니다.

도움이 되었습니까?

해결책

http://make.mad-scientist.net/papers/advanced-auto-dependency-generation 이 정확한 문제에 대한 설명과 주변의 몇 가지 방법이 있습니다. 첫 번째는 약간 잘못 인도되었지만 "고급"은 본질적으로 발견됩니다.

다른 팁

두 가지 가능성 :

먼저, makefile에 규칙을 추가하여 종속성 단계를 실행할 수 있습니까?

.SUFFIXES: .d

%.d::
   makedepend_command_here

그렇지 않다면 Last Resort 섹션의 섹션 info GNU Make 페이지 :

예를 들어, makefile을 테스트 할 때 소스 파일에 실제 데이터가 포함되어 있는지 신경 쓰지 않을 수 있습니다. 그런 다음 다음에 할 수 있습니다.

 %::
         touch $@

필요한 모든 소스 파일 (전제 조건으로)이 자동으로 생성되도록합니다.

이 작업은 빈 생성을 위해 작동 할 것입니다 .d 당신을위한 파일?

사용하는 경우 makepp 옵션으로 --rm-stale, 더 이상 빌드 할 수없는 파일을 발견하고 제거합니다. 이것이 당신을위한 정상적인 usecase라면, 당신은 그 옵션을 .makepprc 빌드 트리의 뿌리에서 항상 사용됩니다.

그러나 물론 MakePP는이 모든 종속성 탐지 자체를 처리하므로 Makefile을 혼란스럽게 할 필요가 없습니다. 컴파일러가 픽업하기 위해 필요한 헤더를 제 시간에 생성 할 수 있기 때문에 접근 방식보다 훨씬 낫습니다. gcc -MM 실패 할 것입니다.

makepp에 훨씬 더 많은 것이 있습니다. GNU가 할 수있는 거의 모든 작업을 수행하는 것 외에도 더 유용한 것들이 더 있으며 Perl 프로그래밍으로 Makefiles를 확장 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top