문제

모든 .c 파일을 나열하는 현재 프로젝트에 대한 문서를 작성해야하며 각 파일에 해당 파일에 직간접 적으로 포함 된 모든 .h 파일을 나열해야합니다.

이것은 큰 프로젝트이며, 이론적 으로이 정보를 가지고있는 makefiles를 가지고 있지만, 그 makefiles는 때때로 틀 렸습니다 (우리는 다른 회사 에서이 프로젝트를 물려 받았습니다). 우리는 종종해야했습니다 make clean ; make 우리의 변화가 실제로 재 컴파일에 반영되기 때문에, 나는이 makefiles에 의존하고 싶지 않습니다.

그렇다면 .c 파일의 이름과 포함 경로의 이름을 알려주고 .c 파일에 직접 또는 간접적으로 포함 된 모든 .h 파일을 알려줄 수있는 도구가 있습니까? 우리는 이상한 것이 없습니다

#define my_include "some_file.h"
#include my_include

따라서 도구가 완벽 할 필요는 없습니다. 정기적으로 포함 된 경로에서 .c 및 .h 파일을 검색 한 것은 충분합니다.

도움이 되었습니까?

해결책

내가 makefile에서하는 일은

SRCS=$(wildcard *.c)

depend: $(SRCS)
    gcc -M $(CFLAGS) $(SRCS) >depend

include depend

즉, 소스 파일 중 하나가 업데이트되면 종속 규칙이 실행되고 GCC -M을 사용하여 종속 파일을 업데이트합니다. 그런 다음 모든 소스 파일에 대한 종속성 규칙을 제공하기 위해 MakeFile에 포함됩니다.

Make는 파일을 포함시키기 전에 최신 상태인지 확인하므로 "Make Depend"를 수행 할 필요없이 제작을 실행할 때 마다이 의존 규칙이 실행됩니다.

파일이 변경 될 때마다 실행됩니다. 이 문제를 발견 한 적이 없지만 디렉토리에 수많은 파일이있는 경우 너무 오래 걸릴 수 있습니다.이 경우 소스 파일 당 하나의 종속성 파일을 사용해 볼 수 있습니다.

SRCS=$(wildcard *.c)
DEPS=$(SRCS:.c=.dep)

%.dep : %.c
    gcc -M $(CFLAGS) $< >$@

include $(DEPS)

시스템 헤더를 포함하지 않기 위해 -m 대신 -mm을 사용할 수 있습니다.

다른 팁

"gcc -m file.c"는 필요한 것을 수행합니다.

GCC -M의 대안은입니다 금식. FastDep의 저자는 Fastdep이 GCC의 -M보다 10 배 빠른 것으로보고합니다. 프로젝트를 구축하는 데 시간이 걸리면 FastDep을 살펴볼 가치가 있습니다.

스콘을 사용하십시오

$ scons --tree=all
scons: Reading SConscript files ...

scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
+-.
  +-SConstruct
  +-app
  | +-test.o
  | | +-test.c
  | | +-/include/PCI_1149_1.h
  | | +-/include/Pci.h
  | | +-/usr/bin/gcc
  | +-/usr/bin/gcc
  | +-/lib/libpci1149_64.a
  ...

MSVC (2005 년과 2008 년에는 VC6이 아닌 다른 버전도 가능하지만)에서 컴파일러가 컴파일 중에 포함 된 모든 파일을 알려줄 수 있습니다. 출력은 매우 장점이지만 완전하고 인간의 눈으로 구문 분석하기가 쉽습니다.

프로젝트 설정에서 C/C ++> 고급 탭으로 이동하여 "쇼 포함"토글을 시작한 다음 프로젝트를 처음부터 재건하십시오.

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