다음을 통해 공유


NMAKE 매크로 사용

매크로를 사용하려면 다음과 같이 해당 이름을 괄호 앞에 달러 기호($)로 묶습니다.

$(macro_name)

공백은 허용되지 않습니다. macro_name 단일 문자인 경우 괄호는 선택 사항입니다. 정의 문자열이 바뀝니다 $(macro_name). 정의되지 않은 매크로는 null 문자열로 바뀝니다.

매크로 대체

macro_name 호출되면 해당 정의 문자열에서 string1각 발생이 string2대체됩니다.

$(macro_name:string1=string2)

매크로 대체는 대/소문자를 구분하며 리터럴입니다. string1string2 는 매크로를 호출할 수 없습니다. 대체는 원래 정의를 수정하지 않습니다. 를 제외한 $$@모든 미리 정의된 매크로에서 텍스트를 바꿀 수 있습니다.

콜론 앞에: 공백이나 탭이 없습니다. 콜론 뒤의 공백이나 탭은 리터럴로 해석됩니다. string2가 null이면 모든 string1이 매크로의 정의 문자열에서 삭제됩니다.

매크로 함수

NMAKE는 문자열, 항목 목록 및 파일 경로를 수정하는 데 사용할 수 있는 함수 집합을 제공합니다. 이러한 함수는 Visual Studio 2022부터 NMAKE에서 사용할 수 있습니다.

함수 구문

함수는 다음 구문을 사용합니다.

$(function_name arg0,arg1,arg2...)

함수에 대한 인수는 모든 문자열일 수 있으며 중첩된 매크로 호출을 포함할 수 있습니다. 특별한 경우를 제외하고 인수는 null일 수 없습니다.

함수 이름과 인수 목록 사이의 추가 공백은 무시됩니다. 첫 번째 인수에 선행 공백이 필요한 경우 필요한 공백이 포함된 매크로를 사용합니다.

SINGLESPACE=$(subst ',,' ') # Use "subst" since a normal assignment trims trailing whitespace.
$(subst $(SINGLESPACE)an,irec,red ant) # Evaluates to "redirect"

인수 목록 내의 쉼표는 항상 인수 구분 기호로 간주되며 이스케이프할 수 없습니다. 인수에 리터럴 쉼표가 필요한 경우 쉼표가 포함된 매크로를 대신 사용합니다.

COMMA=,
INPUT=a, b
$(subst $(COMMA) , and ,$(INPUT)) # Evaluates to "a and b"

목록 구문

일부 함수는 공백으로 구분된 항목 목록을 지원합니다. 추가 공백은 목록의 시작 부분, 목록 끝 또는 각 항목 간에 무시됩니다. 함수에서 생성된 목록은 각 항목 사이의 단일 공백을 구분 기호로 사용하며 선행 또는 후행 공백이 없습니다.

예를 들어 가장 간단한 목록 함수는 단일 목록 인수를 사용하고 정확히 동일한 항목(하지만 위와 같이 정리된 공백 포함)을 사용하여 목록을 생성하는 함수입니다 strip.

$(strip a   b   c d    ) # Evaluates to "a b c d"

패턴 구문

일부 함수는 패턴 사용을 지원합니다. 패턴은 임의의 수의 문자와 일치시킬 수 있는 단일 와일드카드를 포함하는 문자열입니다. 패턴의 첫 번째 % 문자는 와일드카드이고 이후 % 문자는 리터럴로 처리됩니다. % 실제 와일드카드를 사용 \ 해서 이스케이프할 수 있기 전의 모든 위치(즉, \% 리터럴%로 처리됨). 와일드카드를 이스케이프하는 모든 \ 항목은 다른 \ 와일드카드로 이스케이프할 수 있습니다(따라서 \\% 와일드카드 뒤에 리터럴 \ 로 처리됨). 일치 항목으로 간주하려면 모든 입력 문자가 패턴과 일치해야 합니다. 부분 일치는 지원되지 않습니다.

패턴은 패턴과 일치하는 항목만 유지하는 함수를 사용하여 filter 보여 줄 수 있습니다.

$(filter abc,abc) # Evaluates to "abc" - exactly matches
$(filter bc,abc) # Evaluates to "" - pattern "bc" only matches part of the item "abc"
$(filter %ef,abcdef) # Evaluates to "abcdef" - wildcard matches "abcd"
$(filter a%f,abcdef) # Evaluates to "abcdef" - wildcard matches "bcde"
$(filter %abc,abc) # Evaluates to "abc" - wildcard doesn't need to match any characters
$(filter a%c%d,abcd abc%d) # Evaluates to "abc%d" - only the first `%` is a wildcard, the rest are literals
$(filter a\%b%d,a%bcd) # Evaluates to "a%bcd" - `%` before the wildcard must be escaped with `\`
$(filter a\\%cd,a\bcd) # Evaluates to "a\bcd" - a `\` that would escape the wildcard must be escaped with another `\`
$(filter a%c\\%d,abc\\%d) # Evaluates to "abc\\%d" - any `\` after the wildcard isn't treated as an escape
$(filter \\a%f,\\abcdef) # Evaluates to "\\abcdef" - any `\\` that isn't directly before the wildcard isn't treated as an escape

범주별 함수

함수 목적 지원 여부
텍스트 함수 용도 지원됨
findstring, findstringi 입력에 문자열이 포함되어 있는지 확인합니다. VS 2022 17.0
lowercase 문자열을 소문자로 변환합니다. VS 2022 17.2
subst, substi 한 문자열의 모든 인스턴스를 다른 문자열로 대체합니다. VS 2022 17.0
uppercase 문자열을 대문자로 변환합니다. VS 2022 17.2
함수 나열 용도 지원됨
filter, filteri 하나 이상의 패턴과 일치하는 목록의 항목을 유지합니다. VS 2022 17.0
filterout, filterouti 패턴과 일치하지 않는 항목을 목록에 유지합니다. VS 2022 17.0
patsubst, patsubsti 패턴과 일치하는 각 항목을 변환합니다. 일치하지 않는 항목은 그대로 남아 있습니다. VS 2022 17.1
strip 항목 목록 안팎의 공백을 정리합니다. VS 2022 17.0
파일 경로 함수 용도 지원됨
abspath 목록의 각 항목에 대한 절대 경로를 가져옵니다. VS 2022 17.1
basename 목록의 각 항목에 대한 기본 이름을 가져옵니다. VS 2022 17.1

참고 항목

매크로와 NMake