2011-05-10 3 views

답변

4

는 GCC를 사용하는 경우 foo.h 모든 직접 또는 간접적으로

(예 : foo.h를 포함하는 헤더 파일을 포함하여) 파일을 포함에 관심의 모든 모듈에 cpp -Hgrep을 실행 헤더 당신은 개미 :

header=foo.h 

# *.c or all interesting modules 
for i in *.c; do 
    # there's bound to be a cleaner regex for this 
    cpp -H "$i" 2>&1 >/dev/null | grep -q "^\.* .*/$header" && echo "$i" 
done 
+0

+1 거대한 #include 트리가있는 프로젝트의 문제를 진단하는 생명의 은인입니다. – Bogatyr

0

이 SO 포스트는 당신을 도울 수 있습니다

make include directive and dependency generation with -MM

을 기본적으로 프로젝트의 모든 의존성의 목록을 생성 할 수 있습니다합니다. 모든 메이크 파일에서 다음을 사용합니다.

# Generate dependencies for all files in project 
%.d: $(program_SRCS) 
    @ $(CC) $(CPPFLAGS) -MM $*.c | sed -e '[email protected]^\(.*\)\.o:@\1.d \1.o:@' > [email protected] 

clean_list += ${program_SRCS:.c=.d} 

# At the end of the makefile 
# Include the list of dependancies generated for each object file 
# unless make was called with target clean 
ifneq "$(MAKECMDGOALS)" "clean" 
-include ${program_SRCS:.c=.d} 
endif 

예를 들면 다음과 같습니다. boo.h를 포함하는 bar.h를 포함하는 foo.h를 포함하는 foo.cpp가 있다고 가정 해 보겠습니다. 위의 코드는 foo.d 파일을 생성하여 make 파일에 포함시킵니다. 의존성 파일 foo.d은 다음과 같이 보일 것이다 :

foo.d foo.o: foo.cpp foo.h bar.h baz.h 

모두 만드는이 방법 당신은 특정 오브젝트 파일의 전체 빌드 의존성 체인을 볼 수 있습니다.

그런 다음 특정 헤더를 포함하는 모든 파일을 찾으려면 grep -l foo.h *.d을 사용하여 어떤 소스 파일에 foo.h가 포함되어 있는지 확인하십시오.

관련 문제