Makefile
多くの場合、ファイル名を操作するには準備時間が必要です。たとえば、ファイルのパスを取得したり、ファイルのパスを削除したり、ファイルのプレフィックスまたはサフィックスを削除したりします。
注:以下の各関数のパラメーター文字列は、または一連のファイル名として扱われます。
1.ディレクトリ関数dirを取得します
関数の形式は次のとおりです。
$(dir <names>)
関数の説明:この関数は、ファイル名でnames
抽出されたディレクトリセクションからシーケンスをクリアします。
名前がない場合/
、取得される値は./
です。戻り値はディレクトリ部分であり、最後の円記号の前の部分を参照します。バックスラッシュがない場合は、を返し./
ます。例:
OBJ=$(dir a/b/c.cpp, aaa.cpp)
all:
echo $(OBJ)
make
コマンドを実行し、
wohu@ubuntu:~/cpp/func$ make
echo a/b/ ./
a/b/ ./
wohu@ubuntu:~/cpp/func$
2.ファイル関数notdirを取得します
関数の形式は次のとおりです。
$(notdir <names>)
関数の説明:この関数names
は、ディレクトリ内の削除されていない部分からシーケンスのファイル名をクリアします。非ディレクトリ部分は、最後の円記号の後の部分です。戻り値は、ファイルのディレクトリ以外の部分です。例:
OBJ=$(notdir a/b/c.cpp, aaa.cpp)
all:
echo $(OBJ)
makeコマンドを実行し、
wohu@ubuntu:~/cpp/func$ make
echo c.cpp, aaa.cpp
c.cpp, aaa.cpp
wohu@ubuntu:~/cpp/func$
3.サフィックス名関数サフィックスを取る
関数の形式は次のとおりです。
$(suffix <names>)
関数の説明:この関数names
は、各ファイルの取り下げられた拡張子からシーケンスのファイル名をクリアします。names
ファイル拡張子が空でない場合、戻り値はシーケンスファイル名サフィックスシーケンスです。文字列が返されます。例:
OBJ=$(suffix a/b/c.cpp, demo)
all:
echo $(OBJ)
make
コマンドを実行し、
wohu@ubuntu:~/cpp/func$ make
echo .cpp,
.cpp,
wohu@ubuntu:~/cpp/func$
4.プレフィックス関数のベース名を取得します
関数の形式は次のとおりです。
$(basename <names>)
関数の説明:この関数names
は、各ファイル名のファイル名抽出プレフィックス部分からシーケンスをクリアします。戻り値は、取得したファイルのプレフィックス名、またはファイルにプレフィックス名がない場合は空の文字列です。例:
OBJ=$(basename a/b/c.cpp, demo.o)
all:
echo $(OBJ)
make
コマンドを実行します
wohu@ubuntu:~/cpp/func$ make
echo a/b/c demo
a/b/c demo
wohu@ubuntu:~/cpp/func$
5.サフィックス名関数を追加します
関数の形式は次のとおりです。
$(addsuffix <suffix>,<names>)
関数の説明:この関数は、各単語の末尾にsuffix
追加されnames
た接尾辞をクリアします。戻り値は、サフィックスが追加されたファイル名シーケンスです。例:
OBJ=$(addsuffix .cpp, c.cpp demo)
all:
echo $(OBJ)
の実装make
wohu@ubuntu:~/cpp/func$ make
echo c.cpp.cpp demo.cpp
c.cpp.cpp demo.cpp
wohu@ubuntu:~/cpp/func$
ファイル名にサフィックスが付いている場合でも、追加されることがわかります。
6.プレフィックス名関数addperfixを追加します
関数の形式は次のとおりです。
$(addperfix <prefix>,<names>)
関数の説明:この関数は、各単語の前にprefix
追加さnames
れたプレフィックスをクリアします。戻り値は、プレフィックスが追加された一連のファイル名です。例:
OBJ=$(addprefix src/, demo1.cpp demo2.cpp)
all:
echo $(OBJ)
make
コマンドを実行し、
wohu@ubuntu:~/cpp/func$ make
echo src/demo1.cpp src/demo2.cpp
src/demo1.cpp src/demo2.cpp
wohu@ubuntu:~/cpp/func$
この関数を使用して、ファイルにパスを追加できます。
7.リンク関数の結合
関数の形式は次のとおりです。
$(join <list1>,<list2>)
機能説明:この機能は、list2
スプライスlist1
バックに対応する単語の機能です。
より多くのlist1
単語の場合、余分な単語は同じままであり、単語よりも小さい単語の場合、余分な単語はそのまま残ります。戻り値は連結された文字列です。例:list2
list1
list1
list2
list2
OBJ=$(join aa bb, cc dd ee)
all:
echo $(OBJ)
make
コマンドを実行し、
wohu@ubuntu:~/cpp/func$ make
echo aacc bbdd ee
aacc bbdd ee
wohu@ubuntu:~/cpp/func$
取得できる値はaacc bbdd ee
です。明らかlist1
にファイル名はlist2
少ないので、余分なものは変更されていません。
8.一致するパターンファイル名関数のワイルドカードを取得します
コマンドの形式は次のとおりです。
$(wildcard PATTERN)
関数の説明:関数関数はPATTERN
、ファイル名の形式で現在のディレクトリ内のすべての適格なモデルを一覧表示することです。戻り値はスペースで区切られPATTERN
、ファイル名の現在のディレクトリのパターンとすべて一致しています。例:
OBJ=$(wildcard *.cpp *.h)
all:
echo $(OBJ)
make
コマンドを実行する.cpp
と、現在の.h
ファイルとファイルの末尾にあるすべての関数を取得できます。
wohu@ubuntu:~/cpp/func$ ls
demo.cpp demo.h Makefile
wohu@ubuntu:~/cpp/func$ make
echo demo.cpp demo.h
demo.cpp demo.h
wohu@ubuntu:~/cpp/func$
この関数は通常、*
展開時に依存ルールで説明されている使用法と組み合わせて使用されるワイルドカードを使用します(ここでは、wildcard
関数がない場合、操作結果も順序にecho
属しshell
、ワイルドカードは自動的にワイルドカードを使用します)展開します。ここにあります。この関数を使用する場合、参照による変数がルールに含まれている場合に使用する必要があることを説明する必要があります。