NMAKE マクロを使用する
マクロを使用するには、次のようにその名前をかっこで囲み、ドル記号 ($
) を前に付ける必要があります。
$(macro_name)
スペースは使用できません。 macro_name が 1 つの文字の場合、かっこは省略可能です。 定義文字列が $(macro_name)
に置き換わり、未定義のマクロは null 文字列に置き換えられます。
マクロでの代入
macro_name が呼び出されると、その定義文字列で string1 が出現するたびに、string2 に置き換えられます。
$(macro_name:string1=string2)
マクロでの代入は大文字と小文字が区別され、リテラルです。string1 や string2 でマクロは呼び出されません。 代入では、元の定義は変更しません。 テキストは、$$@
を除く任意の定義済みのマクロで置き換えることができます。
コロン (:
) の前にスペースやタブは挿入されません。コロンの後のスペースやタブはリテラルとして解釈されます。 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"
リスト構文
一部の関数では、空白で区切られた項目のリストをサポートしています。 リストの先頭、リストの末尾、または各項目間の余分な空白文字は無視されます。 関数によって生成されるリストでは、各項目間の区切り記号として 1 つのスペースを使用し、先頭または末尾に空白文字は付きません。
たとえば、最も単純なリスト関数は 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 |
1 つの文字列のすべてのインスタンスを別の文字列に置き換えます。 | VS 2022 17.0 |
uppercase |
文字列を大文字に変換します。 | VS 2022 17.2 |
リスト機能 | 目的 | サポートあり |
filter , filteri |
1 つ以上のパターンに一致する項目をリストに保持します。 | 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 |