| HOME / 정보공유 / AIX 명령어 모음

makedepend
makedepend makedepend 명령 목적 makefile에서 종속제품을 작성합니다. 구문
makedepend [ -DName=Def] [ -DName] [ -IIncludeDir ] [ -YIncludeDir ] [ -a ] [ -fMakeFile ] [ -oObjSuffix ] [ -pObjPrefix ] [ -sString ] [ -wWidth ] [ -v] [ -m ] [ --Options-- ] SourceFile ...
설명
makedepend 명령은 각 SourceFile을 연속적으로 읽어서 이를 C 프리프로세서처럼 해석합니다. 모든 #include, #define, #undef, #ifdef, #ifndef, #endif, #if, #else 등의 지시문을 처리해서 어떤 #include 지시문을 컴파일에서 사용해야 하는지 결정합니다. 어떠한 #include 지시문도 다른 #include 지시문이 있는 파일을 참조할 수 있으며, 해석은 이들 파일에서도 진행됩니다.
SourceFile이 직접 또는 간접적으로 포함하는 모든 파일은 makedepend가 "종속제품"으로 부르는 것입니다. 이들 종속 제품은 종속제품을 변경할 때 컴파일되어야 하는 오브젝트 파일을 make 명령이 결정할 수 있는 방식으로 makefile에 쓰여집니다.
디폴트로, makedepend는 그 출력을 이름이 makefile인 파일(있는 경우)에 저장합니다. 대체 makefile은 -f 플래그로 지정할 수 있습니다. makedepend는 우선 사용가능한 makefile에서 아래 행을 탐색하거나
# DO NOT DELETE THIS LINE - make depend depends on it.
종속제품 출력의 분리자로서 -s 플래그와 함께 제공된 것을 찾습니다. 행을 찾은 경우, 행 이후의 모든 것을 makefile의 끝까지 삭제하고 출력을 행 다음에 위치시킵니다. makedepend가 행을 찾지 못하는 경우, 분리된 문자열을 makefile의 끝으로 추가하고 문자열 바로 다음에 출력을 위치시킵니다.
명령 행의 각 SourceFile의 경우, makedepend는 makefile의 행을 다음의 양식으로 놓습니다.
SourceFile.o: dfile ...
여기서, SourceFile.o은 명령행에서 접미사가 .o으로 대체된 이름이며, dfile은 SourceFile 또는 이 파일에 포함된 파일 중 하나를 해석할 때 #include 지시문에서 발견된 종속제품입니다.
이 명령에서 사용된 알고리즘은 하나의 makefile에 의해 컴파일되는 모든 파일이 대략 동일한 -I 및 -D플래그로 컴파일되며, 하나의 디렉토리의 대부분의 파일이 대체적으로 동일한 파일이 들어 있는 것으로 가정합니다.
이러한 가정하에 명령행에 표시되는 make 파일에 의해 유지되는 모든 소스 파일과 함께 각 make 파일에 대해 한번씩 makedepend가 호출될 것을 예상합니다. 각 소스와 포함 파일을 한번만 해석하여 각각에 대한 내부 기호 테이블을 유지합니다. 결과적으로, 명령행의 최초 파일은 정상적인 C 프리프로세서가 취하는 시간량에 비례하는 시간이 소요됩니다. 후속 파일에서 이미 해석한 include 파일을 발견하면, 다시 해석하지 않습니다.
예를 들어, 두 개의 파일 file1.c와 file2.c를 컴파일하는 중이고, 각각에 헤더 파일 header.h가 들어 있다고 가정하십시오. header.h 파일은 def1.h 및 def2.h를 포함합니다. 다음과 같은 명령을 수행하십시오.
makedepend file1.c file2.c
그런 다음, makedepend는 우선 file1.c를 해석하며, 그 뒤에는 header.h를 해석하고, 다음에 def1.h 및 def2.h를 해석합니다.
file1.o: header.h def1.h def2.h
그러나, 프로그램이 두 번째 파일인 file2.c를 해석하고, 여기에도 header.h가 포함되어 있다는 것을 발견하는 경우에는 파일을 해석하지 않고 header.h, def1.h, def2.h 등을 file2.o의 종속제품 리스트에 추가합니다.
주: cpp(Berkeley C 프리프로세서)의 소스가 없는 경우, makedepend는 모든 #if 지시문이 실제 값에 상관없이 False로 평가되도록 컴파일합니다. 그러면 잘못된 #include 지시문을 평가할 수 있습니다. 이러한 경우, #if 식에 대한 새로운 해석기를 작성하는 것이 좋습니다. 새로운 해석기의 필요성은 다음 예제에서 분명히 확인할 수 있습니다.
두 개의 파일 file1.c와 file2.c를 해석 중이고, 각각의 def.h 파일이 들어 있다고 가정하십시오. def.h가 포함하는 파일 리스트는 def.h가 file1.c에 포함될 때와 file2.c에 포함될 때 매우 다를 수도 있습니다. 그러나, 일단 makedepend가 파일에 대한 종속제품 리스트에 도달하면, 구체적으로 평가됩니다.
플래그
주: makedepend 명령은 이해할 수 없는 플래그를 무시합니다. 플래그 사용법은 cc 명령 사용법과 유사합니다.
-DName=Def or -DName makedepend 명령의 기호 테이블에서 Name 변수에 대한 정의를 대체합니다. =Def 지정자가 없는 경우 기호는 1로 정의됩니다.
-IIncludeDir #include 지시문을 발견했을 때 makedepend 명령에서 탐색하는 디렉토리 리스트에 IncludeDir 변수를 추가합니다. 디폴트로, makedepend 명령은 /usr/include 디렉토리만을 탐색합니다.
-YIncludeDir 모든 표준 include 디렉토리를 지정된 하나의 include 디렉토리로 대체합니다. 표준 include 디렉토리를 탐색하지 않도록 IncludeDir을 생략할 수도 있습니다.
-a 종속제품을 대체하지 않고 파일의 끝에 추가합니다.
-fMakeFile 명령 출력을 위치시킬 대체 makefile을 지정할 수 있습니다.
-oObjSuffix 오브젝트 접미사를 지정합니다. 예를 들어, 시스템에 .o 이외의 다른 접미사를 가진 오브젝트 파일이 있을 수도 있습니다. 이 플래그를 사용하면 -o.b에서의 ".b" 또는 -o.obj에서의 ":obj" 등과 같은 다른 접미사를 지정할 수도 있습니다.
-pObjPrefix 오브젝트 파일 접두사를 오브젝트 파일 이름에 미리 추가합니다. 이 플래그는 오브젝트 파일에 다른 디렉토리를 지정하는 데 사용됩니다. 디폴트는 빈 문자열입니다.
-sString 시작 문자열 분리자를 지정합니다. 이 플래그를 사용하면, makefile을 탐색하기 위해 makedepend에 다른 문자열을 지정할 수 있습니다.
-wWidth 출력 행의 최대 행 폭을 변경합니다. 디폴트 최대 폭은 78자입니다.
-v makedepend가 각 입력 파일에 의해 표준 입력에 포함되는 파일 리스트를 표시하게 합니다.
-m 입력 파일이 다른 파일을 두 번 이상 포함하는 경우, makedepend가 경고를 표시하게 합니다. makedepend의 이전 버전에서는 이 조작이 디폴트였습니다. 이 플래그는 역 호환성을 위해, 그리고 다중 포함과 관련된 디버깅 문제점 해결을 지원하기 위해 제공됩니다.
--Options-- 시작과 끝의 이중 하이픈 안의 인식되지 않은 인수는 무시합니다. makedepend가 인수 리스트에서 이중 하이픈(--)을 발견하면, 그 다음에 나오는 모든 인시기되지 않는 인수가 자동으로 무시됩니다. 두 번째 이중 하이픈은 해당 처리를 종료합니다. 이중 하이픈을 사용하는 경우, makedepend는 보통 CFLAGS make 명령 매크로에서 찾을 수 있는 난해한 컴파일러 인수는 무시됩니다(예제 섹션 참조). makedepend가 인식하고 양쪽 이중 하이픈 사이의 모든 플래그는 정상적으로 처리됩니다.
예제
일반적으로, makedepend는 makefile 목표에서 사용되며, 그 결과 makedepend를 입력하면 makefile의 종속제품이 갱신됩니다.
SRCS=file1.c file2.c ...
CFLAGS=-O -DHACK -I../foobar -xyz
depend:
makedepend -- $(CFLAGS) -- $(SRCS)
관련 정보
cc 명령, make 명령.