2008-09-10 6 views
46

많은 변수가 포함 된 매우 복잡한 makefile이있는 대규모 레거시 코드베이스가 있습니다. 때로는 그것들을 바꿔야 할 때도 있는데, 나는 변화가 내가 기대했던대로 작동하지 않는 이유를 알아 내기가 매우 어렵다는 것을 알게되었습니다. 제가 찾고자하는 것은 기본적으로 "make"프로세스를 단계별로 디버깅하는 툴입니다.이 프로세스에서 디렉토리를 지정하면 다른 변수의 값을 볼 수 있습니다. 방법. 디버그 플래그를 만들지 않아도 원하는 것을 표시하는 것처럼 보이지만, 뭔가 빠뜨린 것일 수 있습니다. 누구든지이 일을 할 수있는 방법을 알고 있습니까?메이크 파일을 디버깅하는 도구

답변

48

make -nmake -np 및 biggie make -nd을 실행했을 때의 출력을 살펴 보셨습니까?

gmake의 최신 버전을 사용하고 계십니까?

"GNU Make로 프로젝트 관리하기"(Amazon Link)라는 오렐리의 사이트에있는 Debugging Makefiles의 무료 챕터를 살펴 보셨습니까?

3

정확하게 원하는 특정 플래그는 모르지만

--print-data-base
은 유용 할 것 같은데요.

+0

또는 별칭으로'-p'를 입력하십시오. – sercxjo

20

나는 remake이 당신이 찾고있는 것이라 확신합니다. 홈페이지에서

:

리메이크는 GNU의 패치 및 현대화 버전은 오류보고, 이해 가능한 방법으로 실행을 추적 할 수있는 기능, 및 디버거를 개선 추가합니다 유틸리티를 만들 수 있습니다.

는 GDB와 같은 인터페이스를 가지고 있으며 breakponts을 의미한다 (x)를 이맥스 등 시계에 MDB 모드가 지원되며 (x)는 이맥스 보내는 사람

+0

만약 내가 +100을 추가 할 수 있다면. 리메이크 ('brew install remake'설치)를 사용할 때 디버깅해야하는 문제는 단순히 사라졌습니다. 문제가 뭔지 모르지만 누가 신경 쓰나요? :) – ishahak

10

을 좋아하지 않는 경우 DDD있다 메이크업 명령 줄 옵션에 대한 매뉴얼 페이지

-n, --just-print, --dry-run, --recon 
Print the commands that would be executed, but do not execute them. 

-d Print debugging information in addition to normal processing. 
The debugging information says 
which files are being considered for remaking, 
which file-times are being compared and with what results, 
which files actually need to be remade, 
which implicit rules are considered and which are applied--- 
everything interesting about how make decides what to do. 

--debug[=FLAGS] Print debugging information in addition to normal processing. 
If the FLAGS are omitted, then the behaviour is the same as if -d was specified. 
FLAGS may be: 
'a' for all debugging output same as using -d, 
'b' for basic debugging, 
'v' for more verbose basic debugging, 
'i' for showing implicit rules, 
'j' for details on invocation of commands, and 
'm' for debugging while remaking makefiles. 
0

매우 유용 보이는 http://gmd.sf.net에서 GNU 수 있도록 디버거 프로젝트가 있습니다. gmd가 지원하는 주요 기능은 breakpointing으로 stepping보다 유용 할 수 있습니다. 이를 사용하려면 http://gmd.sf.net에서 gmd를 다운로드하고 http://gmsl.sf.net에서 gmsl을 다운로드하고 makefile에 'include gmd'를 수행하십시오.