MAKE(1)

명칭
make - 프로그램의 의존관계(dependencies)를 메인트넌스 한다

서식
make [-BPSXeiknqrstv] [-D variable] [-d flags] [-E variable] [-f makefile] [-I directory] [-j max_jobs] [-m directory] [-V variable] [variable=value] [target ...]

해설
make 유틸리티는, 프로그램의 메인트넌스를 단순화하기 위한 툴입니다. 그 입력은 파일의 생성과 프로그램과의 사이의 의존관계(dependencies)를 지정한다 리스트가 기술되고 있습니다. 커런트 디렉토리 또는 특별한 오브젝트 디렉토리 ‘(.OBJDIR’ 참조) 의 어느 쪽인지 한편에 있어 ‘makefile’ (와)과 ‘Makefile’ 의 최초로 발견된 (분)편으로부터, 이 지정의 리스트가 읽힙니다. ‘.depend’ 그렇다고 하는 파일이 발견되면, 그것도 읽어들입니다 (mkdep(1) 을 참조)

본메뉴얼은 레퍼런스를 위한 보고의 문서입니다. make (와)과 makefile 에 관한 자세한 소개는 (을)를 참조해 주세요.

옵션은 이하대로입니다.

-B  순차 순서중의 의존행의 소스를 작성하기 위해서, 각 명령에 대해서 1 개의 쉘을 실행하는, 백 워드 호환 모드로 실행하려고 합니다. 이 옵션은 -j 하지만 사용되지 않는 이상 디폴트로 유효하게 됩니다.

-D variable
    광역 변수 variable (을)를 1 으로 정의합니다.

-d flags
    디버그 모드를 유효하게 해, make 하지만 표시하는 디버그 정보의 종류를 지정합니다. 인수 flags 에는, 이하중 1 개(살) 이상을 지정할 수 있습니다.

    A   모든 디버그 정보를 출력합니다. 다른 플래그를 모두 지정한 것과 등가입니다.

    a   아카이브(archive) 검색과 캐쉬에 관한 정보를 표시합니다.

    c   조건 평가에 관한 정보를 표시합니다.

    d   디렉토리 검색과 캐쉬에 관한 정보를 표시합니다.

    f   for 루프의 실행에 관한 디버그 정보를 표시합니다. 현재는 아무것도 하고 있지 않습니다.

    g1  처리를 실시하기 전에, 입력의 그래프를 표시합니다.

    g2  모든 처리를 실시한 뒤, 혹은 에러에 의해 종료하기 전에 입력의 그래프를 표시합니다.

    j   복수의 쉘을 기동하는 경우의 정보를 표시합니다.

    l   @ 하지만 명령에 전치 되고 있든지 있지 않든지, 또 다른 「정적」플래그의 유무에 관련되지 않고, Makefile 의 명령을 표시합니다. 이것은 「까다롭다」동작으로서도 알려져 있습니다.

    m   타겟의 작성이라고 변경 일자에 관한 정보를 표시합니다.

    s   확장자(extension) 해석에 관한 정보를 표시합니다.

    t   타겟 리스트의 메인트넌스에 관한 정보를 표시합니다.

    v   변수의 값에 관한 정보를 표시합니다.

-E variable
    (존재하면) 환경의 값으로 덧쓰기하는, makefile 안의 변수를 지정합니다.

-e  환경의 값으로 makefile 중의 모든 변수의 값을 덧쓰기하도록(듯이) 지시합니다.

-f makefile
    디폴트의 ‘makefile’ (와)과 ‘Makefile’ 의 것인지 비교적, 읽어들이는 파일을 지정합니다. 만약 makefile 하지만 ‘-’ (이)라면 표준 입력으로부터 읽어들입니다. 복수의 파일이 지정 가능해, 지정한 순서에 읽힙니다.

-I directory
    makefile 와 인클루드 되는 makefile 를 검색하기 위한 디렉토리를 지정합니다. 시스템으로 정의되어 있는 makefile 가 있는 디렉토리 (또는, 복수의 디렉토리; -m 옵션을 참조)는 자동적으로 리스트에 포함되어 검색됩니다.

-i  makefile 로부터 실행된 쉘 명령이 0 이 아닌 종료 스테이터스를 돌려주어 (이)라고도 무시합니다. makefile 중에서 명령의 선두에 ‘-’ (을)를 지정하는 것과 같습니다.

-j max_jobs
    make 하지만 동시에 기동할 수 있는 작업의 수를 지정합니다. B 플래그를 지정하지 않으면, 호환성 모드는 오프가 됩니다.

-k  에러가 발생해도 처리를 속행합니다. 다만, 발생한 에러에 의해 작성 하지만 불능이 된 타겟으로 의존한 타겟으로 관계해 처리가 중단됩니다.

-m directory
    <...> 형식에서 읽히는 sys.mk 나 makefile 를 검색하기 위한 디렉토리를 지정합니다. 복수의 디렉토리를 검색 패스에 가세하는 것이 할 수 있습니다. 이 패스는, 디폴트의 시스템 인클루드 패스 /usr/share/mk (을)를 덧쓰기합니다. 게다가 시스템 인클루드 패스를 "..." 형식의 인클루드에 의해 추가할 수가 있습니다( -I 옵션을 참조).

-n  make 가 실행할 명령 내용의 표시만을 실시해, 실행은 하지 않습니다.

-P  병행해 동작하는 작업을 함께 혼합해 출력하므로 없고, 주어진 작업의 차례를 갖추어, 작업이 종료할 때까지 표시하지 않습니다. 이 옵션은 -j 하지만 사용되었을 때 마셔 효과를 가집니다.

-q  모든 명령을 실행하지 않고, 지정된 타겟이 최신의 것이면 0 (을)를, 그렇지 않으면 1 을 종료 스테이터스로서 돌려줍니다.

-r  시스템의 makefile 로 정의된 편입의 룰을 사용하지 않습니다.

-S  에러가 일어났을 때에 처리를 중지합니다. 디폴트의 동작입니다. 이 옵션은 재귀적인 구축 시에 -k 옵션을 지우는데 필요합니다.

-s  실행하는 명령을 표시하지 않습니다. makefile 속에서, 커멘드의 선두에 ‘@’ (을)를 지정하는 것과 같습니다.

-t  makefile 로 지정된 타겟을 다시 만드는 것이 아니라, 타겟을 작성 하든가, 혹은 최종 갱신 일자를 현재의 시각으로 설정하는 것으로써, 타겟이 최신인것 같이 합니다.

-V variable
    글로벌인 문맥에서의 make 의 variable 의 값을 표시합니다. 어떤 타겟도 생성하지 않습니다. 이 옵션으로 복수의 인스턴스를 지정할 수가 있습니다. 변수는, 각 행마다 표시됩니다. 미정도리 혹은 하늘의 변수는, 공행으로 표현됩니다.

-v  특히 장황 표시시킵니다. 복수 작업의 make 에 대해서는, 파일 배너를 생성시킵니다.

-X  -V 옵션을 사용해 변수의 값을 표시할 경우에, 재귀적인 값의 전개를 하지 않습니다.

variable=value
    변수 variable 의 값을 value (으)로 설정합니다.

makefile 에는 7 종류의 행이 있습니다: 의존관계(dependencies) 기술, 쉘 명령, 변수 대입, 인클루드문, 조건 인스트럭션, for 루프, 코멘트입니다.

일반적으로, 행은 줄 끝에 backslash (‘\’) (을)를 두는 것으로 다음 행에 계속시키는 것이로 옵니다. 이 경우, backslash 직후의 개행과 다음의 행의 선두의 공백 부분은 1 개의 공백으로 옮겨집니다.

파일 의존관계(dependencies) 기술
입력 파일에 있어서의 의존관계(dependencies) 기술행은, 1 개(살) 이상의 타겟, 오퍼레이터, 0 개 이상의 소스로부터 됩니다. 이것은, 타겟이 소스에 “의존” 하고 있다고 하는 관계를 정의하고 있어, 통상은, 소스로부터 타겟이 작성됩니다. 타겟과 소스와의 엄밀한 관계는 오퍼레이터에 의해, 양자 사이로 지정합니다. 오퍼레이터에게는 이하의 종류가 있습니다.

:   타겟의 최종 갱신 일자가, 몇개의 소스의 최종 갱신 일자보다 낡은 것으로 있으면, 타겟은 낡은 것으로 있어, 다시 만들어야 할 것과 판단됩니다. 다른 행으로 이 오퍼레이터에 의한 같은 타겟으로 관한 소스의 기술이 있으면, 그것들은 모두 1 개(살)에 정리합니다. 타겟의 작성중에 make 하지만 중단되면(자), 타겟은 삭제됩니다.

!   타겟은 다시 항상 만듭니다. 다만, 다시 만드는 것은, 모든 소스가 검사되어 필요라고 판단된 소스가 만들어 직후입니다. 이 오퍼레이터에 의한 같은 타겟으로 관한 소스의 기술이 다른 행에도 있으면, 그것들은 모두 1 개(살)에 정리합니다. 타겟의 작성중에 make 하지만 중단되면(자), 타겟은 삭제됩니다.

::  소스가 지정되어 있지 않았던 경우, 항상 타겟은 다시 만듭니다. 지정되어 있었을 경우에는 소스중 한쪽이 타겟보다 새로울 때만 타겟은 다시 만듭니다. 본오퍼레이터에서는, 다른 행에 대해 같다 타겟으로 관한 소스의 기술이 있어도 1 개로 정리하지 않습니다. 타겟의 작성중에 make 하지만 중단되어도, 타겟은 삭제되지 않습니다.

타겟과 소스는, 쉘의 와일드 카드 표기로서 ‘’?, ‘*’, ‘[]’, ‘{}’ (을)를 포함할 수가 있습니다. ‘’?, ‘*’, ‘[]’ 의 표기는, 타겟 또는 소스의 마지막 요소로서 기술할 수 있어 존재하는 파일을 지정하는 것이 아니면 안됩니다. 표기 ‘{}’ (은)는 파일이 존재하지 않아도 괜찮습니다. 쉘과 같이 사전순서에 늘어놓을 수 있어 전개될 것은 없고, 파일 시스템상에 줄지어 있는 차례인 채 행해집니다.

쉘 명령
타겟은, 쉘 명령의 열과 관련지을 수가 있어 통상은 거기에 따라 타겟을 작성합니다. 이것에 포함되는 각 명령은, 반드시 줄머리의 탭에 이어 기술합니다. 동일한 타겟으로 대해 복수의 의존 기술행이 있는 경우, ‘::’ 오퍼레이터를 사용했으므로 없으면, 그러한 우리 1 개에게만 명령행을 계속할 수가 있습니다.

명령행의 선두 혹은 선두 2 캐릭터가 ‘@’ (이)나 ‘-’ (이)라면, 명령은 특별한 취급을 받습니다. ‘@’ (은)는, 명령이 실행전에, 커멘드 내용의 표시를 억제합니다. ‘-’ (은)는, 명령의 0 이 아닌 종료 스테이터스를 무시하도록(듯이) 지시합니다.

변수 대입
make 그리고 사용되는 변수는 쉘에서의 변수에 유사하고 있습니다. 그리고, 역사적인 경위로부터, 모두 대문자로부터 되는 이름이 이용됩니다. 변수 대입에는 이하의 5 방법의 오퍼레이터를 사용할 수 있습니다.

=   변수에 값을 대입합니다. 그 시점까지의 값은 없어집니다.

+=  현재의 변수의 값에, 우변의 값을 추가합니다.

? = 변수가 미정도리의 경우만, 값을 대입합니다

:=  우변을 전개한 값을 대입합니다. 즉, 변수에 대입하기 전에 값의 전개를 실시합니다. 통상, 값의 전개는 대입시에는 행해지지 않고, 변수가 참조될 때 행해집니다.

! = 우변을 전개한 값을 쉘에 실행시켜, 실행 결과를 좌변의 변수에 대입합니다. 결과 속에 포함되는 개행은 공백으로 옮겨집니다.

어느 경우도, 값의 전에 있는 공백은 무시됩니다. 값이 추가되는 경우, 변수의 직전의 값과 추가하는 값과의 사이에 공백이 삽입됩니다.

변수는, 달러 기호 (‘$’) 에 이어 안괄호 (‘{}’) 또는 소괄호 (‘()’) 그리고 둘러싸인 변수명을 두는 것으로 전개됩니다. 만약 변수명이 1 캐릭터인 들 , 변수명을 둘러싸는 괄호는 생략 할 수 있습니다만, 이러한 생략형은 추천 할 수 없습니다.

변수 치환은, 변수가 이용되고 있는 장소에 의해, 2 개(살)의 다른 타이밍에 행해집니다. 의존관계(dependencies) 기술행으로 이용된 변수는, 그 행이 읽혔을 때에 전개됩니다. 쉘 명령내에서 이용된 변수는, 쉘 커멘드 실행시에 전개됩니다.

변수에는, 우선도에 따라, 4 개(살)이 다른 클래스가 있습니다:

환경 변수
    make 의 환경안으로 유효한 변수

글로벌 변수
    makefile 와 인클루드 된 makefile 내에서 유효한 변수.

명령행 변수
    명령행으로 지정된 변수.

로컬 변수
    어느 타겟에만 대해 정의되는 변수. 로컬 변수에는, 이하의 7 종류가 있습니다:

    .ALLSRC
        이 타겟으로 대하는 모든 소스의 리스트. ‘>’ 도 같습니다.

    .ARCHIVE
        archive파일명. ‘’! 도 같습니다.

    .IMPSRC
        타겟명으로 변환하는데 사용하는 소스의 파일명 또는 패스명 ( “암묵의” 소스). ‘<’ 도 같습니다.

    .MEMBER
        아카이브(archive)의 멤버. ‘%’ 도 같습니다.

    .OODATE
        타겟보다 새로운 소스의 리스트. ‘’? 도 같습니다.

    .PREFIX
        타겟의 디렉토리명으로 확장자(extension)를 없앤 이름. ‘*’ 도 같습니다.

    .TARGET
        타겟의 이름. ‘@’ 도 같습니다.

    짧은 형식 ‘@’, ‘’!, ‘<’, ‘%’, ‘’?, ‘>’, ‘*’ (은)는 호환성을 위한 물건입니다만, 이용하는 것은 추천 할 수 없습니다. 또, ‘@F’, ‘@D’, ‘<F’, ‘<D’, ‘*F’, ‘*D’ 하 AT&T UNIX 의 makefile 와의 호환성을 위해서(때문에) 존재하고 있습니다만, 이용하는 것은 추천 할 수 없습니다.

    다음의 4 개의 로컬 변수는 의존관계(dependencies) 기술행의 소스에 사용할 수가 있습니다. 이것들은, 그 행의 타겟 마다의 값에 전개됩니다. 이러한 로컬 변수는 ‘.TARGET’, ‘.PREFIX’, ‘.ARCHIVE’, ‘.MEMBER’ 입니다.

게다가 make 그럼 이하의 내부 변수 또는 환경 변수를 이용할 수가 있습니다.

$   단일의 달러 기호 ‘$’ ‘$$’ (은)는 단일의 달러 기호에 치환됩니다.

MAKE
    make 의 기동에 사용된 이름 (argv[0])

.CURDIR
    make 하지만 실행된 디렉토리. make 유틸리티는 .CURDIR (을)를, getcwd(3) (으)로부터 건네받는 공식적인 패스로 설정합니다.

.OBJDIR
    타겟을 작성하는 디렉토리에의 패스. 기동시에, make (은)는 타겟 파일을 두는 대신의 디렉토리를 검색합니다. make (은)는 이 특별한 디렉토리로 이동하는 것을 시도해 makefile 하지만 커런트 디렉토리에 없었던 경우에는 이 디렉토리에서 검색됩니다. 이하의 차례로 디렉토리는 시험 받습니다:

    1.  ${MAKEOBJDIRPREFIX}/`pwd`
    2.  ${MAKEOBJDIR}
    3.  obj.${MACHINE}
    4.  obj
    5.  /usr/obj/`pwd`

    최초로 make 하지만 이동에 성공한 디렉토리가 사용됩니다. 만약 MAKEOBJDIRPREFIX 또는 MAKEOBJDIR 의 어느 쪽인지가 환경에서 설정되어 있어 make 하지만 대응하는 디렉토리로 이동할 수 없었던 경우는, 리스트의 나머지를 체크하는 것 없이 커런트 디렉토리가 사용됩니다. 그것들이 정의되지 않고 make 하지만 남은 3 개의 디렉토리의 어느 것에도 이동할 수 없었던 경우, 커런트 디렉토리가 사용됩니다.

.MAKEFLAGS
    환경 변수 MAKEFLAGS (은)는, make 의 명령행에서 지정되는 모든 것을 포함합니다. 그 내용은 MAKEFLAGS 변수에 기억됩니다. make 의 명령행에서 지정되는 모든 것은 MAKEFLAGS 변수에 추가되어 make 하지만 실행하는 전프로그램의 환경에 이 변수가 MAKEFLAGS (으)로서 짜넣어집니다.

MFLAGS
    하위 호환성을 위해서(때문에) .MAKEFLAGS 의 동의어로서 제공됩니다.

PWD 현재의 디렉토리에의 다른 패스. WANT_ENV_PWD 하지만 정의되어 구축되었을 경우에 서포트됩니다. make (은)는 보통, ‘.CURDIR’ (을)를 getcwd(3) 그리고 얻을 수 있던 정식적 패스로 설정합니다. 그렇지만, 환경 변수 PWD 하지만 설정되어 있어 주어진 패스가 커런트 디렉토리때, make (은)는, ‘.CURDIR’ (을)를 PWD 의 값으로 설정합니다. make 하지만 실행하고 있는 모든 프로그램에 대해서는, PWD 에 ‘.OBJDIR’ 의 값을 항상 설정합니다.

.TARGETS
    make 하지만 현재 구축하고 있는 타겟의 리스트.

.INCLUDES
    .INCLUDES 특수 타겟 참조.

.LIBS
    .LIBS 특수 타겟 참조.

MACHINE
    MACHINE 환경 변수, 또는 정의되어 있지 않은 경우는 uname(3) 에 의해 얻을 수 있는, make 하지만 동작하고 있는 머신 아키텍쳐의 명칭.

MACHINE_ARCH
    make 의 컴파일시에 정의되었다 make 하지만 어느 머신 아키텍쳐전용으로 컴파일 되었는지를 나타내는 명칭.

VPATH
    Makefile (은)는 코론으로 단락지어진 디렉토리의 리스트를 VPATH (으)로 설정할 수가 있습니다. make 하지만 모든 입력 makefile 의 해석을 종료한 후, make (은)는 이 디렉토리에서 원시 파일을 검색합니다.

변수 전개에 대해, 그 변수내의 단어를 선택하거나 변경하거나 하는 것이 할 수 있습니다 ( “단어” (와)과는 공백에서 단락지어진 캐릭터 라인입니다). 변수 전개의 일반형은, 다음과 같습니다.

    {variable[:modifier[:...]]}

각 수식자는, 코론과 이하에 나타내는 몇개의 캐릭터 중 1 캐릭터로부터 됩니다. 리터럴인 코론 (‘’): (을)를 지정하려면 코론의 전에 backslash (‘\’) (을)를 둡니다.

C/pattern
    /replacement /[1g] C 수식자는 S 수식자를 닮아 있습니다만, 단순한 치환대신에 확장 정규 표현 ( re_format(7) (을)를 참조해 주세요) 를 구캐릭터 라인에 사용하는 것으로, ed(1) 스타일의 치환 캐릭터 라인을 신캐릭터 라인에 사용하는 것이 다릅니다. 통상, 치중의 각 어의 최초의 패턴을 치환합니다. ‘1’ 수식자는, 치환 대상을 최대 1 어에 제한합니다. ‘g’ 수식자는, 치환 대상의 개수가, 말 (또는 복수의 어) 중에서 발견되는 검색 패턴수와 같게 되도록(듯이) 합니다. ‘1’ (와)과 ‘g’ (은)는 직교 하고 있는 것에 주의해 주세요. 전자는, 복수의 말이 영향을 받을 수 있는지 아닌지를 지정합니다만, 후자는, 영향을 받는 각 어 중(안)에서 복수의 치환이 발생 할 수 있는지 아닌지를 지정합니다.

E   변수중의 각 단어를 확장자(extension)로 치환합니다.

H   변수중의 각 단어를, 패스의 마지막 요소 (을)를 제외한 부분에서 치환합니다.

L   변수를 소문자로 변환합니다.

Mpattern
    pattern 에 매치 하는 단어를 선택합니다. 표준적인 와일드 카드 (‘*’, ‘’?, ‘[]’) 하지만 사용할 수 있습니다. 와일드 카드 캐릭터는 backslash (‘\’) 에 의해 이스케이프 할 수 있습니다.

Npattern
    pattern 에 매치 하지 않는 단어를 선택합니다. 그 이외는 M (와)과 같습니다.

Q   변수중의 모든 쉘 메타 캐릭터를 쿼트 해, 재귀 기동된다 make 에 안전에 건네줄 수 있도록(듯이) 합니다.

R   변수중의 각 단어로부터 확장자(extension)를 없앱니다.

S/old_string
    /new_string /[g] 변수의 값으로 각 단어중의 최초의 old_string (을)를 new_string 에 치환합니다. 만약, 마지막 slash의 후에 ‘g’ 하지만 지정되어 있으면, 각 단어중에 출현한 모든 old_string 하지만 new_string 에 치환됩니다. old_string 하지만 caret (‘^’) 그리고 시작되어 있다면, old_string (을)를 각 단어의 선두로부터 매치 시키는 것을 의미합니다. old_string 하지만 달러 기호 (‘$’) 그리고 끝나 있다면, 그 캐릭터 라인을 각 단어의 종단에 매치 시키는 것을 의미합니다. new_string 안의 ampersand(&) (‘&’) 하 old_string 에 치환됩니다. 수식 캐릭터 라인의 단락에는 어떤 캐릭터를 사용해도 괜찮습니다. ‘^’ , ‘$’ , ‘&’ (와)과 단락 캐릭터는 backslash (‘\’) 에 의해 이스케이프 할 수 있습니다.

    old_string (와)과 new_string 안에서는 통상의 변수 치환을 합니다. 다만, 달러 기호 (‘$’) 의 전개를 억제하기 위해서는, 통상의 달러 기호의 전치가 아니고, backslash로 이스케이프 합니다.

T   변수중의 각 단어를 패스의 마지막 요소 그리고 치환합니다.

old_string=new_string
    이것은 AT&T UNIX 에서의 변수 치환의 형식입니다. 이것은 마지막 수식자로서 지정할 필요가 있습니다. 만약, 패턴 매치 캐릭터 % 하지만 new_string 에도 old_string 에도 포함되지 않으면, new_string (와)과 old_string (은)는 어느쪽이나 단어의 마지막에 매치 하는 것으로 간주해집니다. 즉, 확장자(extension)만인가, 또는 단어 전부가 치환되게 됩니다. 그렇지 않으면, % 하지만 old_string 에 포함되어 있어 그것은 new_string 에 치환됩니다.

U   변수를 대문자로 변환합니다.

지시문, 조건식,FOR 루프
make 그럼,C 언어를 방불 시키는 지시문, 조건문, 루프를 사용하는 것이 할 수 있습니다. 이러한 제어 구조는, 줄머리에 단일의 닷 (‘’). 하지만 오는 것으로 식별됩니다. 이하의 지시문이 서포트되고 있습니다:

.include <file>

.include file
    지정한 makefile 를 인클루드 합니다. 앵글 브랙킷이 사용되었을 경우는, makefile 는 시스템의 makefile 디렉토리에 있는 것을 이용합니다. 더블 쿼트가 사용되었을 경우는, makefile 가 존재하는 디렉토리, -I 옵션으로 지정된 디렉토리, 시스템의 makefile 디렉토리의 순서에 검색합니다.

.undef variable
    지정한 글로벌 변수를 미정도리로 합니다. 글로벌 변수만, 미정도리로 할 수가 있습니다.

.error message
    makefile 의 처리를 즉석에서 종료합니다. makefile 의 파일명과 어느 행으로 에러가 되었는지라고 지정한 에러 메세지를, 표준 출력에 표시해, make (은)는 종료 코드 1 으로 종료합니다.

조건문은 Makefile 목의 부분을 처리하는지를 판정하기 위해서 사용합니다. C 프리프로세서가 서포트하는 조건문과 같게 사용됩니다. 이하의 조건문이 서포트되고 있습니다:

    .if [!]expression [operator expression ...] 식의 값을 테스트합니다.

    .ifdef [!]variable [operator variable ...] 변수의 값을 테스트합니다.

    .ifndef [!]variable [operator variable ...] 변수의 값을 테스트합니다.

    .ifmake [!]target [operator target ...] 타겟 target 하지만 작성중인지 어떤지를 테스트합니다.

    .ifnmake [!]target [operator target ...] 타겟 target 하지만 작성중인지 어떤지를 테스트합니다.

.else
    마지막에 간 조건문의 의미를 반대로 합니다.

    .elif [!]expression [operator expression ...] ‘.else’ (와)과 직후의 ‘.if’ (을)를 대상으로 한 것입니다.

    .elifdef [!]variable [operator variable ...] ‘.else’ (와)과 직후의 ‘.ifdef’ (을)를 대상으로 한 것입니다.

    .elifndef [!]variable [operator variable ...] ‘.else’ (와)과 직후의 ‘.ifndef’ (을)를 대상으로 한 것입니다.

    .elifmake [!]target [operator target ...] ‘.else’ (와)과 직후의 ‘.ifmake’ (을)를 대상으로 한 것입니다.

    .elifnmake [!]target [operator target ...] ‘.else’ (와)과 직후의 ‘.ifnmake’ (을)를 대상으로 한 것입니다.

.endif
    조건문의 본체를 종료시킵니다.

오퍼레이터 operator (은)는, 이하 중 머지않아인가입니다.

||  논리 OR.

&&  논리 AND. ‘||’ 보다 우선 순위가 위입니다.

C 언어와 같이, make (은)는 조건식을, 식의 값을 결정하는데 필요한 곳까지 밖에 평가하지 않습니다. 평가 순서를 변경하려면 괄호를 사용합니다. 논리 오퍼레이터 ‘!’ (은)는 조건식 전체의 값을 반전하는데 사용합니다. ‘!’ 하 ‘&&’ 보다 우선 순위가 위입니다.

식 expression (은)는, 이하의 몇개의 형식입니다:

defined
    인수로서 변수명을 취해, 변수가 정의되고 있으면 진이 된다.

make
    인수로서 타겟명을 취해, 그 타겟이 make 의 명령행 인수로 지정되어 있는지, 디폴트의 타겟 (명시적인 물건도 암묵적인 물건도 포함한다. .MAIN 의 항을 참조) (으)로서 선언되고 있는 경우에 진이 된다.

empty
    인수로서 변수명 (와 수식자) (을)를 취해, 전개한 결과가 공문자열이라면 진이 된다.

exists
    인수로서 파일명을 취해, 파일이 존재하면 진이 된다. 파일은 시스템 검색 패스 (.PATH 의 항을 참조) 에 따라 검색된다.

target
    인수로서 타겟명을 취해, 타겟이 정의되고 있다면 진이 된다.

조건식 expression (으)로서는, 수치 혹은 캐릭터 라인의 비교를 이용할 수도 있습니다. 비교 오퍼레이터의 양변은, 변수 전개가 적용된 뒤에 비교됩니다. 값이 0x 로 시작된다면 16 진수 이다고 해석해, 아주 없으면 10 진수라고 해석합니다. 8 진수는 서포트해 없습니다. 표준적인 C 언어의 관계 오퍼레이터는 모두 이용 가능합니다. 변수 전개 후, ‘==’ 또는 ‘! =’ 의 좌변치 또는 우변치중 한쪽이 수치라고는 인정받지 않는 경우, 캐릭터 라인으로서 비교를 실시합니다. 관계 오퍼레이터가 지정되지 않았던 경우, 전개된 변수와 0 을 비교합니다.

조건식을 평가중에, 평가할 수 없는 단어가 출현했을 경우는, 조건식의 형식에 의해, “make” 또는 “defined” 오퍼레이터를 적용합니다. 조건식이 ‘.ifdef’ 또는 ‘.ifndef’ (이)라면 “defined” (을)를, 조건식이 ‘.ifmake’ 또는 ‘.ifnmake’ (이)라면 “make” (을)를, 각각 적용합니다.

조건식이 진이라고 평가되었다면, makefile 의 해석은 그대로 속행됩니다. 가짜라고 평가되었다면, ‘.else’ 또는 ‘.endif’ 하지만 발견될 때까지 makefile 의 해석을 스킵 합니다.

for 루프는, 몇개의 룰을 일련의 파일에 적용하는데 자주(잘) 이용됩니다. 이하가 루프의 형식입니다:

.for variable in expression
<make-rules>
.endfor

expression (은)는 평가된 뒤에 단어에 분해되어 각각을 variable 에 대입 하면서, make-rules 부분을 반복해 전개합니다.

코멘트
코멘트는 해시 기호 (‘#’) (으)로부터 시작되어, 쉘 명령행 이외의 어디에라도 둘 수가 있습니다. 코멘트는 개행으로 끝납니다.

특수 소스

.IGNORE
    책 타겟으로 관련한 명령에서의 에러를 무시합니다. 쉘 커멘드의 선두에 데쉬 ‘-’ (을)를 지정한 것과 등가입니다.

.MAKE
    비록, -n (이)나 -t 옵션이 지정되어 있어도, 이 타겟으로 관련한 쉘 명령을 실행합니다. 통상, 재귀적인 make (을)를 위해서(때문에) 이용됩니다.

.NOTMAIN
    통상 make (은)는, 최초로 발견한 타겟을 디폴트의 타겟으로 간주합니다. .NOTMAIN 하지만 지정된 타겟은 디폴트의 타겟이라고는 보이지 않게 됩니다.

.OPTIONAL
    만약 .OPTIONAL 하지만 지정된 타겟을 만드는 방법을 몰라도, 에러라고는 하지 못하고, 그 타겟은 필요없는지, 벌써 존재하고 있는 것으로 간주합니다.

.PRECIOUS
    통상 make 하지만 중단되었을 때는, 작성 도중의 타겟은 삭제됩니다. 본소스를 지정하는 것으로, 그 타겟을 삭제하지 않게 됩니다.

.SILENT
    지정된 타겟으로 관련 지을 수 있었던 쉘 명령을 실행할 경우에 에코를 실시하지 않습니다. 쉘 명령의 선두에 ‘@’ (을)를 지정한 것과 등가입니다.

.USE
    지정된 타겟을 매크로적으로 취급합니다. .USE (을)를 소스에 가지는 타겟 (이하에서는 매크로라고 부릅니다) 하지만 다른 타겟의 소스가 되었을 경우, 그 타겟은 명령, 소스, 속성( .USE (은)는 제외하다) (을)를 매크로로부터 받습니다. 만약, 벌써 타겟으로 명령이 지정되어 있었다 경우는, 매크로의 명령이 추가됩니다.

.WAIT
    특별한 .WAIT 소스가 의존관계(dependencies)행에 나타났을 때에는, 소스는 그 행중에서 소스가 작성될 때까지 기다립니다. 루프는 검출되지 않고, 루프 형식의 타겟은 단지 무시됩니다.

특수 타겟
특수 타겟은, 다른 타겟과 함께 사용 해서는 안됩니다. 즉, 의존관계(dependencies) 기술행의 유일한 타겟으로서 지정할 필요가 있습니다.

.BEGIN
    책 타겟으로 지정된 쉘 명령은 다른 처리에 앞서 실행됩니다.

.DEFAULT
    이것은, 작성 방법을 모르는 어떤 타겟으로도 적용된다 .USE 룰과 같은 것입니다. 셸 스크립트만을 사용합니다. .DEFAULT (으)로 지정된 명령중의 .IMPSRC 변수는 타겟 자신의 이름에 치환됩니다.

.END
    책 타겟으로 지정된 쉘 명령은, 다른 모든 처리의 종료후에 실행됩니다.

.IGNORE
    지정된 소스에 .IGNORE 속성을 부여합니다. 만약 소스가 지정되어 있지 않으면, -i 옵션을 지정한 것과 같은 의미가 됩니다.

.INCLUDES
    원시 파일중에서 include 될 가능성이 있는 파일의 확장자(extension)의 리스트. 확장자(extension)는 미리 .SUFFIXES 그리고 선언되어 있지 않으면 안됩니다; 이와 같이 선언된 확장자(extension)는 자신의 검색 패스( .PATH 참조) 에 각각 -I 플래그를 앞에 두고 붙인 상태로 .INCLUDES 특수 변수로 설정됩니다.

.INTERRUPT
    make 하지만 중단되었을 때, 책 타겟으로 지정된 명령을 실행합니다.

.LIBS
    .INCLUDES 하지만 include 파일에 대해서 행하는 것으로 같은 것을 프로그램 라이브러리에 대해서 행합니다. 다만 -L 플래그가 사용됩니다.

.MAIN
    타겟을 지정하지 않고 make 하지만 기동되었을 경우, 본타겟을 처리합니다. make 하지만 디폴트 타겟을 선택했을 때에, 이용자가 명령행으로부터 디폴트 타겟을 지시할 수 있도록(듯이) 하기 위한(해), 명시적·암묵적으로 관련되지 않고 반드시 설정됩니다.

.MAKEFLAGS
    소스에 대해, make (으)로 지정하는 플래그를 지정합니다. 플래그는 쉘로 타이프 친 것과 같게 건네받습니다만, -f 옵션은 무효가 됩니다.

.NOTPARALLEL
    병렬 모드를 사용하지 않습니다.

.NO_PARALLEL
    위와 같습니다만, pmake 의 변종을 위한 호환성을 위해서(때문에) 있습니다.

.ORDER
    순차 순서중의 이름 첨부 타겟이 작성됩니다.

.PATH
    커런트 디렉토리에 발견할 수 없었을 때의 파일의 검색 패스를, 본타겟의 소스로서 지정합니다. 소스가 지정되지 않았던 경우, 이전으로 설정되어 있던 디렉토리가 무효가 됩니다. 가능하면 .PATH (을)를 이용하는 (분)편이, VPATH 변수를 이용하는 것보다도 선호되고 있습니다.

.PATHsuffix
    커런트 디렉토리에 발견할 수 없었을 때의 suffix 가 붙은 파일의 검색 패스를 소스로서 지정합니다. make 유틸리티는 파일이 발견되지 않았던 경우에, 디폴트 패스보다 먼저, 우선 suffix 가 붙은 검색 패스로 찾습니다. 이 형식은 .LIBS (와)과 .INCLUDES 하지만 동작하기 위해서 필요합니다.

.PHONY
    .PHONY 속성을 지정한 소스에 적용합니다. 이 속성을 가진 타겟은 언제라도 갱신되고 있다고 생각됩니다.

.PRECIOUS
    지정된 소스에 .PRECIOUS 속성을 부여합니다. 만약, 소스가 지정되지 않았던 경우, 모든 타겟으로 .PRECIOUS 속성을 줍니다.

.SILENT
    지정된 소스에 .SILENT 속성을 부여합니다. 만약, 소스가 지정되지 않았던 경우, 파일중의 모든 명령에 .SILENT 속성을 줍니다.

.SUFFIXES
    소스에 대해, make 그리고 이용하는 확장자(extension)를 지정합니다. 소스가 지정되지 않았던 경우는, 이전의 지정이 무효가 됩니다.

호환성
make 의 낡은 버젼은 MAKEFLAGS 대신에 MAKE (을)를 사용하고 있었습니다. 이 기능은 POSIX 에의 호환성을 위해서(때문에) 삭제되었습니다. 내부 변수 MAKE 하 .MAKE (와)과 같은 값이 대입됩니다 ; 이 기능은 장래 삭제될지도 모릅니다.

make 의 많은 비밀로 되고 있는 기능의 상당수는, 보다 많은 호환성을 유지하기 위해서(때문에) 사용을 피해야 합니다.

환경 변수
make 유틸리티는 다음의 환경 변수의 값을 이용합니다: MACHINE, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, PWD

관련 파일
.depend
    의존관계(dependencies) 리스트
Makefile
    의존관계(dependencies) 리스트
makefile
    의존관계(dependencies) 리스트
obj 오브젝트 디렉토리
sys.mk
    시스템 정의의 makefile (다른 모든 파일보다 전에 처리됩니다. 이것에는 makefile (와)과 Makefile 도 포함됩니다)
/usr/share/mk
    시스템 정의의 makefile 가 놓여지는 디렉토리
/usr/share/doc/psd/12.make
    PMake 의 튜토리얼
/usr/obj
    디폴트의 MAKEOBJDIRPREFIX 디렉토리

버그
.OBJDIR 의 결정은 부조리라고 해도 좋을 정도(수록)까지 곡해 됩니다.

복수의 .MAIN 특수 타겟이 존재했을 경우, make (은)는 최초의 것 이외는 입다물어 무시합니다.

make 하지만 타겟명없이 기동되었을 경우와 .MAIN 특수 타겟이 존재하지 않았던 경우, .TARGETS (은)는 설정되지 않습니다.

테스트시의 expression 의 평가는 그다지 기분이 배부되고 있지 않습니다. 현재, ‘.if ${VAR} op something’ 그렇다고 하는 형식에서 밖에 움직이지 않습니다. 예를 들면, 테스트는 ‘.if ${VAR} = string’ (와)과 같이 쓰지 않으면 안됩니다. 다른 쓰는 법에서는 움직이지 않습니다.

for 루프는 테스트되기 전에 전개되기 (위해)때문에,

    .for TMACHINE in ${SHARED_ARCHS}
    .if ${TMACHINE} = ${MACHINE}
         ...
    .endif
    .endfor

(와)과 같은 단편은 움직이지 않습니다. 다른 방법을 사용해 고쳐 쓸 필요가 있습니다.

관련 항목
mkdep(1), make.conf(5) PMake - A Tutorial. /usr/share/doc/psd/12.make 에 있습니다.

역사
make 하 AT&T UNIX 에 두어 추가되었습니다.