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

make
make make 명령 목적 프로그램 그룹을 유지, 갱신 및 재생성합니다. 구문
make [ -DVariable ] [ -d Option] ] [ -e ] [ -i ] [ -k ] [ -n ] [ -p ] [ -q ] [ -r ] [ -S ] [ -s ] [ -t ] [ -f MakeFile ... ] [ Target ... ]
설명
make 명령은 프로그램 세트를 유지하는 데 도움을 줍니다. make 명령에 입력하는 것은 파일 종속제품 스펙 리스트입니다.
makefile에는 4가지 유형의 행, 즉 파일 종속제품 스펙, 쉘 명령, 변수 지정, 주석 등이 있습니다. 일반적으로 행은 한 행에서 \(백슬래쉬)로 끝나는 다음 행까지 계속 이어집니다. 다음 행에서 이어지는 개행 문자와 초기 공백 문자는 하나의 공백으로 압축됩니다.
파일 종속제품 스펙
종속 행은 하나 이상의 목표, 연산자, 0 이상의 전제조건(소스) 등으로 구성됩니다. 종속 행은 목표가 전제조건에 따라 다르고 보통 전제조건으로부터 작성되는 관계를 작성합니다. 목표 및 전제조건간의 정확한 관계는 이를 구분하는 연산자에 의해 결정됩니다. 연산자는 다음과 같습니다.
: 수정 시간이 전제조건의 시간보다 짧은 경우, 목표는 이전의 것으로 간주됩니다. 목표의 전제조건은 이 연산자를 사용할 때 종속 행에 누적합니다. make 명령이 인터럽트되는 경우, 목표가 .PRECIOUS 속성을 갖고 있지 않으면 제거됩니다.
:: 전제조건이 지정되어 있지 않은 경우에는 목표가 항상 재작성됩니다. 그렇지 않고, 전제조건이 목표보다 최근에 수정된 경우 목표가 이전의 것으로 간주됩니다. 이 연산자를 사용하는 경우, 목표의 전제조건은 종속 행에 누적하지 않습니다. make 명령이 인터럽트되면 목표가 제거되지 않습니다.
파일 종속제품 스펙에는 두 가지 유형의 규칙, 즉 추론 규칙과 목표 규칙이 있습니다. 추론 규칙은 목표를 갱신하는 방법을 지정합니다. 이 규칙에는 /(슬래쉬)가 없고, 최소 하나의 .(마침표) 상태의 목표가 하나 있습니다. 목표 규칙은 목표를 구축하는 방법을 지정합니다. 이 규칙은 둘 이상의 목표를 가질 수 있습니다.
Makefile 실행
make 명령은 Makefile의 명령을 한 행씩 실행합니다. make가 각 명령을 수행할 때, 명령을 표준 출력으로 작성합니다(예: -s 플래그를 사용하여 달리 지정한 경우는 제외). makefile에서 각 행의 명령 앞에는 탭이 있어야 합니다.
명령이 make 명령을 통해서 실행될 경우, make의 실행 환경을 사용합니다. 이 환경은 명령행에서 make 명령까지의 매크로와 MAKEFLAGS 변수에서 지정되는 환경 변수를 포함합니다. make 명령의 환경 변수는 기존 환경의 동일한 이름의 변수를 겹쳐씁니다.
주: make 명령이 include라는 단어 다음에 Makefile의 이름인 또다른 단어로 시작하는 행(예: include depend)을 발견한 경우, make 명령은 해당 파일을 열어서 내용이 include 행이 발생한 위치에 표시된 것처럼 내용을 처리하려고 시도합니다. 이 조작은 make 명령이 읽은 첫번째 makefile의 첫번째가 아닌 주석 행이 .POSIX 목표가 아닌 경우에만 발생합니다.
주석: 주석은 쉘 명령행을 제외한 어디에서나 #(번호 부호)로 시작해서 행의 끝까지 계속됩니다.
환경: make 명령은 MAKEFLAGS 환경 변수(있는 경우)를 사용합니다.
목표 규칙
목표 규칙은 다음과 같은 형식을 가집니다.
target[target...] : [prerequisite...] [;command]
command
다중 목표 및 전제조건은 공백으로 구분됩니다. (세미콜론) 다음에 오는 텍스트 및 탭 문자로 시작하는 모든 후속 행은 목표를 갱신하는 데 사용하는 명령으로 간주됩니다. 새 목표 항목은 새 행이 탭 문자나 #(번호 기호)로 시작하지 않을 경우에 시작됩니다.
주: 전제조건의 리스트는 비어 있을 수 있습니다.
특별 목표
특별 목표는 다른 목표와 함께 포함될 수 없습니다. 즉, 지정된 유일한 목표여야 합니다. 이들 목표는 make 명령 작업을 제어합니다이들 목표는 다음과 같습니다.
.DEFAULT make 명령이 또다른 작성 방법을 알 수 없는 모든 목표(전제조건으로만 사용된)에 대하여 규칙으로 사용됩니다. 쉘 스크립트만 사용됩니다. .DEFAULT 명령을 상속하는 <(왼쪽 대괄호) 변수는 목표 자신의 이름으로 설정됩니다.
.IGNORE 이 목표의 전제조건은 목표 자체입니다. 이렇게 함으로써 목표와 연관된 명령의 오류는 무시됩니다. 전제조건이 지정되지 않은 경우에는 -i 플래그를 지정하는 것과 동일합니다.
.POSIX make 명령에 다른 디폴트 규칙 파일을 작성하도록 지정합니다. 파일 /usr/ccs/lib/posix.mk는 POSIX 표준에서 지정한 것과 같은 디폴트 규칙을 제공합니다.
.PRECIOUS 이 목표의 전제조건은 목표 자체입니다. .PRECIOUS는 목표가 제거되는 것을 방지합니다전제조건이 지정되지 않은 경우, .PRECIOUS 속성은 파일의 모든 목표에 적용됩니다보통, make가 인터럽트되면(예를 들어, SIGHUP, SIGTERM, SIGINT, SIGQUIT 등에서) 부분적으로 작성된 목표를 제거합니다. make를 -n, -p, -q 등의 플래그로 호출하는 경우, 목표는 .PRECIOUS 속성이 있는 것으로 간주됩니다.
.SILENT 목표의 전제조건이 목표 자체입니다. 이렇게 함으로써 목표와 연관된 명령이 실행 전에 표준 출력으로 기록되지 않도록 합니다. 전제조건이 지정되지 않은 경우, .SILENT 속성이 파일의 모든 명령에 적용됩니다.
.SUFFIXES make가 인식하는 파일 접미사 리스트에 접미사를 더 추가하려면 이 이름을 사용하십시오. 목표 전제조건이 알려진 접미사 리스트에 추가됩니다. 접미사를 지정하지 않으면, 이전에 지정된 접미사가 삭제됩니다. 이 접미사는 인터페이스 규칙에 사용됩니다. 접미사 순서를 변경하려면, 빈 .SUFFIXES 항목을 입력한 후 새로운 .SUFFIXES 항목 리스트를 지정해야 합니다. makefile은 .SUFFIXES와 연관되어서는 안됩니다.
추론 규칙
make 명령에는 Makefile에서 추가적인 추론 규칙 정의를 보충하거나 겹쳐쓸 수 있는 일련의 디폴트 추론 규칙이 있습니다. 규칙은 외부 파일인 /usr/ccs/lib/aix.mk에 저장됩니다명령 행을 통해 MAKERULES 변수를 사용자 자신의 파일 이름으로 설정하여 자신의 규칙을 대체할 수 있습니다다음 행은 명령에서 규칙 파일을 변경하는 방법을 보여줍니다.
make MAKERULES=/pathname/filename
추론 규칙은 목표 접미사와 명령으로 구성됩니다. 접미사에서 make 명령은 전제조건을 결정하고, 접미사 및 전제조건 양측에서 make 명령은 목표를 갱신하는 방법을 결정합니다. 추론 규칙은 다음과 같은 형식으로 되어 있습니다.
rule:
command
...
이 때, rule은 다음과 같은 형태로 되어 있습니다.
.s1 단일 접미사 하나가 추가된 목표의 구축 방법에 대해 설명하는 단일 접미사 추론 규칙입니다.
.s1.s2 .s1이 추가된 전제조건을 사용하여 .s2가 추가된 목표의 구축 방법을 설명하는 이중 접미사 추록 규칙입니다.
.s1 및 .s2 접미사는 특수 목표인 .SUFFIXES의 전제조건으로 정의됩니다. 접미사 .s1 및 .s2는 Makefile에 추론 규칙이 표시될 때 알려진 접미사여야 합니다. 추론 규칙은 .SUFFIXES에 지정된 순서대로 접미사를 사용합니다. 새로운 추론 규칙은 개행이 또는 #(번호 부호)로 시작하지 않을 경우에 시작됩니다.
rule이 비어 있는 경우
rule: ;
실행은 효과가 없고, make 명령은 접미사가 있음을 인식하지만, 목표가 이전 목표일 경우에는 조치를 취하지 않습니다.
앞의 규칙에서 ~(물결 표시)는 SCCS 파일을 말합니다. 따라서, 규칙 .c~.o는 SCCS C 언어 전제조건 파일을 오브젝트 파일(.o)로 변환합니다. SCCS 파일의 s.가 접두어이기 때문에 make 명령의 접미사 열람과 호환될 수 없습니다. ~(물결 표시)는 임의의 파일 참조를 SCCS 파일 참조로 변경하는 방법입니다.
라이브러리
목표나 전제조건은 또한 아카이브 라이브러리의 멤버일 수 있고, 이름에 괄호가 있는 것처럼 처리됩니다. 예를 들어, library(name)는 name이 아카이브 라이브러리 library의 멤버라는 것을 나타냅니다. 특정 파일에서 라이브러리의 멤버를 갱신하려면 .s1.a 형식을 사용할 수 있는데, 이때 .s1 접미사를 가진 파일이 아카이브 라이브러리의 멤버를 갱신하는 데 사용됩니다. .a는 아카이브 라이브러리를 참조합니다.
매크로 사용
makefile에서 매크로 정의는 다음과 같은 형식으로 정의됩니다.
variable=value
매크로는 makefile 전체에 걸쳐서 다음과 같이 나타날 수 있습니다.
매크로가 목표 행에 나타나는 경우에는 목표 행을 읽을 때 평가됩니다.
매크로가 명령행에 나타나는 경우에는 명령을 수행할 때 평가됩니다.
매크로가 매크로 정의 행에 나타날 경우에는 새 매크로가 규칙이나 명령에 나타날 때 평가됩니다.
매크로에 정의가 없으면, 디폴트는 NULL입니다. 새로운 매크로 정의는 같은 이름의 기존 매크로를 겹쳐씁니다. 매크로 지정은 다음에서 지정된 순서대로 제공될 수 있습니다.
디폴트 추론 규칙
환경의 내용
Makefile
명령행
주: -e 플래그는 환경 변수가 makefile에서 정의한 변수를 대체하게 합니다.
SHELL 매크로는 특수합니다. 이는 make 명령에 의해서 shell 명령 해석기의 경로 이름(/usr/bin/sh)으로 설정됩니다. 그러나 이것이 makefile이나 명령행에서 다시 정의된 경우, 이 디폴트 설정을 겹쳐씁니다.
주: SHELL 매크로는 SHELL 환경 변수에 영향을 미치지 않으며, 해당 환경 변수에 의해 영향을 받지 않습니다.
Shell 명령
각 목표는 보통 목표를 작성하는 데 사용하는 일련의 shell 명령과 연관되었을 수도 있습니다. 이 스크립트의 각 행 앞에는 탭이 있어야 합니다. 목표가 종속 행에 나타날 수 있는 반면, :: 연산자가 사용되지 않으면, 이들 종속제품 중 하나에서만 작성 스크립트가 이어질 수 있습니다.
명령 행의 최초 문자나 처음 두 개의 문자가 @, -, + 등으로 구성된 경우, 명령은 다음과 같이 특별하게 처리됩니다.
@ 명령이 실행되기 전에 반향되지 않습니다.
- 명령행의 제로가 아닌 종료 상태는 무시됩니다.
+ 옵션이 -n, -q, -t 등으로 지정된 경우에도 명령 행이 실행됩니다.
메타 문자가 없는 명령은 make 명령으로 직접 실행됩니다. 예를 들어, make 명령은 다음 예제의 첫번째 명령이 >(보다큼 부호) 쉘 메타 문자가 들어 있기 때문에 이를 쉘에 넘깁니다. 다음 예제의 두 번째 명령은 쉘 메타 문자가 없기 때문에 make 명령이 이를 직접 실행합니다.
target: dependency
cat dependency > target
chmod a+x target
쉘을 생략하면, 시간이 절약되지만 문제점을 일으킬 수 있습니다. 예를 들어, SHELL 매크로를 /bin/csh로 설정하여 makefile 내부로부터 C 쉘 스크립트를 실행하려고 하는 경우, 명령행에 둘 이상의 쉘 메타 문자가 들어 있지 않으면 이 스크립트는 실행되지 않습니다.
SHELL=/bin/csh
target: dependency
my_csh_script
이 makefile은 make 명령이 my_csh_script를 C 쉘에 넘기지 않고 실행하려고 하기 때문에 실패합니다.
변수 지정
make 명령의 변수는 쉘의 변수와 아주 유사하고 모두 대문자로 구성됩니다. = 연산자는 값을 변수에 지정합니다. 그러면, 이전의 변수는 모두 대체됩니다.
지정된 값이 제거되기 전의 공백 문자입니다. 값이 추가되면, 단일 공백이 이전의 변수 내용과 추가된 값 사이에 삽입됩니다.
변수의 이름을 { }(중괄호) 또는 ( )(괄호)로 묶고 $(달러 부호)를 앞에 두어서 변수를 확장합니다. 변수 이름이 단일 문자로 구성된 경우에는 중괄호나 괄호로 묶을 필요가 없습니다. 이처럼 짧은 형태는 사용하지 않는 것이 좋습니다.
변수 치환은 변수가 어디에 사용되는지에 따라 상이한 두 시기에 발생합니다. 종속 행의 변수는 행을 읽을 때 확장됩니다. 쉘 명령의 변수는 shell 명령을 실행할 때 확장됩니다.
변수의 4개 클래스(우선순위가 낮은 것부터) 다음과 같습니다.
환경 make 명령 환경의 일부로 정의된 변수
전역 makefile 또는 포함된 makefile에서 정의되는 변수입니다.
명령 행 명령행의 일부로 정의되는 변수입니다.
국지 특정 목표에 고유하게 정의되는 변수입니다. 국지 변수는 다음과 같습니다.
$<
목표의 날짜를 지나게 만든 전제조건의 전체 이름(추론 규칙)이거나 목표의 전체 이름(.DEFAULT 규칙)을 나타냅니다.
$*
접미사 없는 날짜 지난 목표(추론 규칙으로)로 만든 전제조건의 파일 이름 섹션을 나타냅니다.
$@
현재 목표의 전체 목표 이름 또는 라이브러리 아카이브 목표의 아카이브 파일 이름 부분을 나타냅니다.
$%
목표가 아카이브 라이브러리의 멤버인 경우, 목표 규칙의 라이브러리 멤버를 나타냅니다.
D 또는 F가 추가된 상태로 이들 국지 변수를 사용할 수도 있습니다.
D
국지 변수가 이름의 디렉토리 부분에 적용된다는 것을 의미합니다. 이는 뒤에 /(슬래쉬)가 없는 경로 이름 접두어입니다. 현재의 디렉토리에서 D는 .(마침표)입니다.
F
국지 변수가 이름의 파일 이름 부분에 적용된다는 것을 의미합니다.
또한 make 명령은 다음 변수를 설정하고 이를 이해합니다.
$ 단일 $(달러 부호). 즉, $$는 단일 달러 부호를 확장합니다.
LANG LC_ALL 및 해당 환경 변수(LC_로 시작함)가 모든 로케일을 지정하지 않은 경우, 로케일 범주에 사용할 로케일을 결정합니다.
LC_ALL LANG 또는 기타 LC_ 환경 변수의 설정으로 지정한 로케일 범주의 값을 대체하는 데 사용될 로케일을 결정합니다.
LC_CTYPE 문자로서의 텍스트 데이터의 연속적인 바이트를 해석하기 위한 로케일을 결정합니다. 예를 들어, 인수에서 단일 바이트 문자 대 복수 바이트 문자 등입니다.
LC_MESSAGES 메세지를 작성할 언어를 결정합니다.
MAKEFLAGS 환경 변수 MAKEFLAGS는 make 명령행에 지정하는 모든 것을 포함할 수 있습니다. make의 명령행에서 지정되는 것은 MAKEFLAGS 변수에 추가되며, 그 후 make가 실행하는 모든 프로그램의 환경에 입력됩니다. MAKEFLAGS 변수의 -f 및 -p 플래그의 조작은 정의되지 않는다는 사실에 주의하십시오. 명령행 플래그는 이 변수의 -f 및 -p 플래그에 선행합니다.
VPATH 전제조건을 탐색하기 위한 디렉토리 리스트를 지정할 수 있습니다. 디렉토리 리스트는 SHELL의 PATH 변수처럼 작동합니다. VPATH 변수는 콜론으로 구분된 다중 디렉토리를 지정할 수 있습니다. 예를 들어 다음과 같습니다.
VPATH=src:/usr/local/src
make 명령에게 주어진 순서에 따라 다음의 디렉토리를 탐색하라고 지시합니다.
현재의 디렉토리(VPATH 없이도 발생함)
src(현재 디렉토리 내의 서브디렉토리)
/usr/local/src
플래그
-DVariable Variable 값을 1로 설정합니다.
-dOption make가 조사하는 파일 및 시간에 관한 세부 정보를 표시합니다(디버그 모드). 옵션이 없거나 A 옵션이 있는 -d 플래그는 사용 가능한 모든 디버그 정보를 표시합니다. 개별적으로 선택 가능한 디버그 옵션은 다음과 같습니다.
A
가능한 모든 디버그 정보를 표시합니다.
a
아카이브 탐색 및 캐쉬 작업에 관한 디버그 정보를 표시합니다.
d
디렉토리 탐색에 관한 디버그 정보를 표시합니다.
g1
모든 것을 만들기 전에 입력 그래프에 관한 디버그 정보를 표시합니다.
g2
무엇인가를 만든 후나 오류로 종료되기 전에 입력 그래프에 관한 디버그 정보를 표시합니다.
m
수정 날짜를 포함하여 목표 작성에 관한 디버그 정보를 표시합니다.
s
접미사 탐색에 관한 정보를 표시합니다.
v
변수 지정에 관한 디버그 정보를 표시합니다.
-e 환경 변수가 makefile 내의 매크로 지정을 대체하도록 지정합니다.
-fMakeFile 디폴트 makefile 대신에 읽을 makefile을 지정합니다. MakeFile이 -(대쉬)인 경우, 표준 입력을 읽습니다. 다중 makefile을 지정할 수 있으며, 지정된 순서대로 읽습니다.
-i Makefile에서 shell 명령의 제로가 아닌 종료를 무시합니다. makefile의 각 행 앞에 -(대쉬)를 지정하는 것과 동일합니다.
-k 오류가 발생한 후에도 처리를 계속하지만, 작성으로 인해 오류를 발생시키는 목표에 의존하지 않는 목표에 한합니다.
-n 명령을 표시하지만 실행하지는 않습니다. 그러나 +(더하기 부호)로 시작하는 행은 실행됩니다.
-p 명령을 수행하기 전에 완전한 매크로 정의 및 목표 설명 세트를 표시합니다.
-q 목표 파일이 최신 파일인 경우에는 제로 상태 코드를 리턴하고, 목표 파일이 최신 파일이 아닌 경우에는 하나의 상태 코드를 리턴합니다. 그러나, +(더하기 부호) 접두어가 있는 명령행은 실행됩니다.
-r 디폴트 규칙을 사용하지 않습니다.
-S 오류가 발생한 경우 make 명령을 종료합니다. 이것이 디폴트이며, -k 플래그의 반대입니다.
-s 명령을 수행할 때 화면에 표시하지 않습니다.
-t 목표를 작성하거나 목표를 최신 목표로 만들기 위한 수정 시간을 갱신합니다. +(더하기 부호)로 시작하는 명령행을 실행합니다.
Target Target 양식의 목표 이름을 지정하거나 변수 값을 설정합니다.
종료 상태
-q 플래그가 지정되는 경우, 이 명령은 다음과 같은 종료 값을 리턴합니다.
0 성공적으로 완료되었습니다.
1 최신 목표가 아닙니다.
>1 오류가 발생했습니다.
그 밖의 경우, 이 명령은 다음과 같은 종료값을 리턴합니다.
0 성공적으로 완료되었습니다.
>1 오류가 발생했습니다.
예제
makefile에서 찾은 첫번째 목표를 만들려면, 다음을 입력하십시오.
make
make 명령이 파일을 작성하는 데 사용하는 명령을 수행하지 않고 표시하려면, 다음을 입력하십시오.
make -n search.o
새 설명 파일을 사용하기 전에 올바른지 검증하기 위해 이를 수행할 수도 있습니다.
pgm이 두 개의 파일 a.o 및 b.o에 종속되고 이들이 차례로, 해당하는 전제 조건 파일(a.c 및 b.c)과 일반 파일 incl.h에 종속되었음을 표시하는 Makefile을 작성하려면, 다음을 입력하십시오.
pgm: a.o b.o
c89 a.o b.o -o pgm
a.o: incl.h a.c
c89 -c a.c
b.o: incl.h b.c
c89 -c b.c
.c 파일로부터 최적화된 .o 파일을 작성하려면, 다음을 입력하십시오.
.c.o:
c89 -c -o $*.c
or:
.c.o:
c89 -c -o $<
내장 규칙의 내용을 열람하려면, 다음을 입력하십시오.
make -p -f /dev/null 2>/dev/null
파일
makefile 종속제품의 리스트가 들어 있습니다.
Makefile 종속제품의 리스트가 들어 있습니다.
s.makefile 종속제품의 리스트가 들어 있습니다.이것은 SCCS 파일입니다.
s.Makefile 종속제품의 리스트가 들어 있습니다.이것은 SCCS 파일입니다.
/usr/ccs/lib/posix.mk make 명령에 대한 디폴트 POSIX 규칙이 들어 있습니다.
/usr/ccs/lib/aix.mk make 명령에 대한 디폴트 규칙이 들어 있습니다.
관련 정보
sh 명령