シンプルで理解しやすいMakefileエントリ(06)-ファイル名操作関数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

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単語の場合、余分な単語は同じままであり、単語よりも小さい単語の場合、余分な単語はそのまま残ります。戻り値は連結された文字列です。例:list2list1list1list2list2

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、ワイルドカードは自動的にワイルドカードを使用します)展開します。ここにあります。この関数を使用する場合、参照による変数がルールに含まれている場合に使用する必要があることを説明する必要があります。

おすすめ

転載: blog.csdn.net/wohu1104/article/details/111025942
おすすめ