표준 cscope를 검색 foo.h 직접 bar.c에헤더 파일을 포함하여 모든 파일을 나열하는 방법 "이 파일을 #include 한 파일 찾기"에 대한
하지만 포함되어
수익률 만 일치
표준 cscope를 검색 foo.h 직접 bar.c에헤더 파일을 포함하여 모든 파일을 나열하는 방법 "이 파일을 #include 한 파일 찾기"에 대한
하지만 포함되어
수익률 만 일치
는 GCC를 사용하는 경우 foo.h 모든 직접 또는 간접적으로
(예 : foo.h를 포함하는 헤더 파일을 포함하여) 파일을 포함에 관심의 모든 모듈에cpp -H
및
grep
을 실행 헤더 당신은 개미 :
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
이 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가 포함되어 있는지 확인하십시오.
+1 거대한 #include 트리가있는 프로젝트의 문제를 진단하는 생명의 은인입니다. – Bogatyr