다음을 통해 공유


설명 블록

설명 블록은 메이크파일의 핵심을 형성합니다. 대상 또는 만들 파일과 대상을 만드는 데 필요한 파일의 종속성을 설명합니다. 설명 블록에는 종속성에서 대상을 만드는 방법을 설명하는 명령이 포함될 수 있습니다. 설명 블록은 종속성 줄이며, 필요에 따라 명령 블록이 뒤따릅니다.

targets... : dependents...
    commands...

종속성 선

종속성 줄하나 이상의 대상과 0개 이상의 종속성을 지정합니다. 대상이 없거나 종속 타임스탬프보다 이전 타임스탬프가 있는 경우 NMAKE는 명령 블록에서 명령을 실행합니다. NMAKE는 대상이 의사 대상인 경우에도 명령 블록을 실행합니다. 다음은 종속성 줄 예제입니다.

hi_bye.exe : hello.obj goodbye.obj helper.lib

이 종속성 줄에서 hi_bye.exe 대상입니다. 해당 종속성은 hello.obj, goodbye.objhelper.lib. 종속성 줄은 NMAKE에 대상 hello.objgoodbye.objhelper.lib hi_bye.exe을 빌드하도록 지시합니다.

대상은 줄의 시작 부분에 있어야 합니다. 공백이나 탭으로 들여쓰기할 수 없습니다. 콜론(:)을 사용하여 대상과 종속 대상을 구분합니다. 대상, 콜론 구분 기호(:) 및 종속 항목 간에 공백 또는 탭이 허용됩니다. 종속성 줄을 분할하려면 대상 또는 종속 항목 다음에 백슬래시(\)를 사용합니다.

명령 블록을 실행하기 전에 NMAKE는 모든 종속성 및 적용 가능한 유추 규칙을 검사하여 종속성 트리빌드합니다. 종속성 트리는 대상을 완전히 업데이트하는 데 필요한 단계를 지정합니다. NMAKE는 종속성이 다른 종속성 목록의 대상인지 재귀적으로 확인합니다. 종속성 트리를 빌드한 후 NMAKE는 타임스탬프를 확인합니다. 트리의 종속 항목이 대상보다 최신인 경우 NMAKE는 대상을 빌드합니다.

대상

종속성 줄의 대상 섹션은 하나 이상의 대상을 지정합니다. 대상은 유효한 파일 이름, 디렉터리 이름 또는 의사 대상일 수 있습니다. 하나 이상의 공백 또는 탭을 사용하여 여러 대상을 구분합니다. 대상은 대/소문자를 구분하지 않습니다. 경로는 파일 이름으로 허용됩니다. 대상 및 해당 경로는 256자를 초과할 수 없습니다. 콜론 앞의 대상이 단일 문자인 경우 구분 공백을 사용합니다. 그렇지 않으면 NMAKE는 문자 콜론 조합을 드라이브 지정자로 해석합니다.

대상이 여러 개인 경우

NMAKE는 각각 별도의 설명 블록에 지정된 것처럼 단일 종속성으로 여러 대상을 평가합니다.

예를 들어 이 규칙은 다음과 같습니다.

bounce.exe leap.exe : jump.obj
   echo Building...

는 다음과 같이 평가됩니다.

bounce.exe : jump.obj
   echo Building...

leap.exe : jump.obj
   echo Building...

누적되는 종속 줄

대상이 반복되면 설명 블록에서 종속성이 누적됩니다.

예를 들어 이 규칙 집합은

bounce.exe : jump.obj
bounce.exe : up.obj
   echo Building bounce.exe...

는 다음과 같이 평가됩니다.

bounce.exe : jump.obj up.obj
   echo Building bounce.exe...

단일 설명 블록에 여러 종속성 줄에 여러 대상이 있는 경우 NMAKE는 각각 별도의 설명 블록에 지정된 것처럼 평가합니다. 그러나 마지막 종속성 줄의 대상만 명령 블록을 사용합니다. NMAKE는 다른 대상에 대한 유추 규칙을 사용하려고 시도합니다.

예를 들어 이 규칙 집합은

leap.exe bounce.exe : jump.obj
bounce.exe climb.exe : up.obj
   echo Building bounce.exe...

는 다음과 같이 평가됩니다.

leap.exe : jump.obj
# invokes an inference rule

bounce.exe : jump.obj up.obj
   echo Building bounce.exe...

climb.exe : up.obj
   echo Building bounce.exe...

여러 개의 설명 블록에 포함된 대상

서로 다른 명령을 사용하여 둘 이상의 설명 블록에서 대상을 업데이트하려면 대상과 종속 항목 간에 두 개의 연속 콜론(::)을 지정합니다.

target.lib :: one.asm two.asm three.asm
    ml one.asm two.asm three.asm
    lib target one.obj two.obj three.obj
target.lib :: four.c five.c
    cl /c four.c five.c
    lib target four.obj five.obj

종속 줄의 부수적 효과

서로 다른 위치에 있는 두 종속성 줄에 콜론(:) 대상을 지정할 수 있습니다. 명령이 한 줄 다음에만 나타나면 NMAKE는 줄이 인접하거나 결합된 것처럼 종속성을 해석합니다. 명령이 없는 종속성에 대한 유추 규칙을 호출하지 않습니다. 대신 NMAKE는 종속성이 하나의 설명 블록에 속한다고 가정하고 다른 종속성으로 지정된 명령을 실행합니다. 다음 규칙 집합을 고려합니다.

bounce.exe : jump.obj
   echo Building bounce.exe...

bounce.exe : up.obj

는 다음과 같이 평가됩니다.

bounce.exe : jump.obj up.obj
   echo Building bounce.exe...

이중 콜론(::)을 사용하는 경우에는 이 효과가 발생하지 않습니다. 예를 들어 이 규칙 집합은 다음과 같습니다.

bounce.exe :: jump.obj
   echo Building bounce.exe...

bounce.exe :: up.obj

는 다음과 같이 평가됩니다.

bounce.exe : jump.obj
   echo Building bounce.exe...

bounce.exe : up.obj
# invokes an inference rule

의사 대상

의사 대상은 종속성 줄의 파일 이름 대신 사용되는 레이블입니다. 존재하지 않는 파일로 해석되며 오래된 파일입니다. NMAKE는 의사 대상의 타임스탬프가 모든 종속 항목 중 가장 최근의 타임스탬프와 동일하다고 가정합니다. 종속이 없으면 현재 시간을 가정합니다. 의사 대상을 대상으로 사용하는 경우 해당 명령은 항상 실행됩니다. 종속성으로 사용되는 의사 대상도 다른 종속성의 대상으로 표시되어야 합니다. 그러나 해당 종속성에는 명령 블록이 필요하지 않습니다.

의사 대상 이름은 대상에 대한 파일 이름 구문 규칙을 따릅니다. 그러나 이름에 확장명이 없는 경우 파일 이름에 대한 8자 제한을 초과할 수 있으며 최대 256자까지 가능합니다.

Pseudotargets는 NMAKE가 둘 이상의 대상을 자동으로 빌드하려는 경우에 유용합니다. NMAKE는 명령줄에 지정된 대상만 빌드합니다. 또는 명령줄 대상이 지정되지 않은 경우 메이크파일의 첫 번째 종속성에서 첫 번째 대상만 빌드합니다. 명령줄에 개별적으로 나열하지 않고 여러 대상을 빌드하도록 NMAKE에 지시할 수 있습니다. 의사 대상을 포함하는 종속성을 사용하여 설명 블록을 작성하고 빌드할 대상을 종속 항목으로 나열합니다. 그런 다음 이 설명 블록을 메이크파일에서 먼저 배치하거나 NMAKE 명령줄에서 의사 대상을 지정합니다.

이 예제에서 UPDATE는 의사 대상입니다.

UPDATE : *.*
COPY $** c:\product\release

UPDATE가 평가되면 NMAKE는 현재 디렉터리의 모든 파일을 지정된 드라이브 및 디렉터리에 복사합니다.

다음 메이크파일에서 의사 대상 all 은 명령줄에 대상 중 하나 all 또는 전혀 지정되지 않은 경우 둘 다 project1.exe project2.exe 빌드합니다. pseudotarget setenv 은 파일을 업데이트하기 전에 LIB 환경 변수를 .exe 변경합니다.

all : setenv project1.exe project2.exe

project1.exe : project1.obj
    LINK project1;

project2.exe : project2.obj
    LINK project2;

setenv :
    set LIB=\project\lib

종속 파일

종속성 줄에서 유효한 파일 이름 또는 의사 대상을 사용하여 콜론(:) 또는 이중 콜론(::) 다음에 0개 이상의 종속성을 지정합니다. 하나 이상의 공백 또는 탭을 사용하여 여러 종속을 구분합니다. 종속은 대/소문자를 구분하지 않습니다. 경로는 파일 이름으로 허용됩니다.

유추된 종속 파일

종속성 줄에 명시적으로 나열하는 종속성과 함께 NMAKE는 유추된 종속성을 가정할 수 있습니다. 유추된 종속은 유추 규칙에서 파생되며 명시적 종속성 전에 평가됩니다. 유추된 종속성이 대상에 비해 만료된 경우 NMAKE는 종속성에 대한 명령 블록을 호출합니다. 유추된 종속이 없거나 자체 종속에 비해 만료된 경우 NMAKE는 먼저 유추된 종속성을 업데이트합니다. 유추된 종속성에 대한 자세한 내용은 유추 규칙을 참조하세요.

종속 파일의 경로 검색

각 종속에 대한 선택적 검색 경로를 지정할 수 있습니다. 검색할 디렉터리 집합을 지정하는 구문은 다음과 같습니다.

{directory[;디렉터리...]}종속의

디렉터리 이름을 중괄호({ })로 묶습니다. 여러 디렉터리를 세미콜론(;)으로 구분합니다. 공백이나 탭은 허용되지 않습니다. NMAKE는 현재 디렉터리에서 먼저 종속을 찾은 다음 지정된 순서로 디렉터리 목록에서 찾습니다. 매크로를 사용하여 검색 경로의 일부 또는 전체를 지정할 수 있습니다. 지정된 종속성만 이 검색 경로를 사용합니다.

디렉터리 검색 경로 예제

이 종속성 줄은 검색에 대한 디렉터리 사양을 만드는 방법을 보여줍니다.

reverse.exe : {\src\omega;e:\repo\backwards}retro.obj

대상에는 종속된 대상이 reverse.exe 하나 있습니다 retro.obj. 중괄호로 묶인 목록은 두 개의 디렉터리를 지정합니다. NMAKE는 먼저 현재 디렉터리에서 검색 retro.obj 합니다. 이 디렉터리가 없으면 NMAKE는 \src\omega 디렉터리, 디렉터 e:\repo\backwards 리를 검색합니다.

참고 항목

NMAKE 참조