patsubst
、 patsubsti
NMAKE 関数
項目の一覧に対して、置換によって置き換えられるパターンに一致する各項目と、一致せずにそのまま維持される項目を評価します。
構文
$(patsubst pattern,replacement,input)
$(patsubsti pattern,replacement,input)
パラメーター
pattern
検索するパターン。
replacement
pattern
の置換後のパターン。 replacement
にワイルドカードが含まれている場合、その部分は、pattern
内のワイルドカードと一致したテキストに置き換えられます。
input
置換または維持される項目の一覧。
戻り値
input
が返されます。ただし、pattern
に一致する各項目は replacement
によって置き換えられます。 pattern
に一致しない項目はそのまま維持されます。
解説
patsubsti
は patsubst
の大文字と小文字を区別しないバージョンです。
このマクロ関数は、NMAKE バージョン 14.31 以降、Visual Studio 2022 バージョン 17.1 以降で使用できます。
例
$(patsubst He%,_%_,Hello Hey Hi) # Evaluates to "_llo_ _y_ Hi"
# "He" matches "Hello" and "Hey", and so "llo" and "y" are matched by the wildcard
# and used to substitute the wildcard in the replacement. "Hi" is not matched and so is kept as-is
$(patsubst Hi,Bye,Hello Hey Hi) # Evaluates to "Hello Hey Bye" - No wildcard is required
$(patsubst %lo,Bye,Hello Hey Hi) # Evaluates to "Bye Hey Hi"
# A wildcard can be used in the pattern without a wildcard in the replacement
$(patsubst he%,_%_,Hello Hey Hi) # Evaluates to "Hello Hey Hi" - patsubst is case-sensitive, so no substitutions performed
$(patsubsti he%,_%_,Hello Hey Hi) # Evaluates to "_llo_ _y_ Hi" - patsubsti is case-insensitive
# patsubsti is commonly used to change the file extensions of a list of files
OBJ_FILES=$(patsubst %.c,%.obj,$(C_SOURCES)) $(patsubst %.cpp,%.obj,$(patsubst %.cxx,%.obj,$(CPP_SOURCES)))