日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

發(fā)布時(shí)間:2023/11/28 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編寫 Makefile 的時(shí)候,很多情況下需要對(duì)文件名進(jìn)行操作。例如獲取文件的路徑,去除文件的路徑,取出文件前綴或后綴等等。

注意:下面的每個(gè)函數(shù)的參數(shù)字符串都會(huì)被當(dāng)作或是一個(gè)系列的文件名來看待。

1. 取目錄函數(shù) dir

函數(shù)使用格式如下:

$(dir <names>)

函數(shù)說明:函數(shù)的功能是從文件名序列 names 中取出目錄部分,

如果names 中沒有 / ,取出的值為 ./ 。返回值為目錄部分,指的是最后一個(gè)反斜杠之前的部分。如果沒有反斜杠將返回 ./。實(shí)例:

OBJ=$(dir  a/b/c.cpp, aaa.cpp)
all:echo $(OBJ)

執(zhí)行 make 命令,

wohu@ubuntu:~/cpp/func$ make
echo a/b/ ./
a/b/ ./
wohu@ubuntu:~/cpp/func$ 

2. 取文件函數(shù) notdir

函數(shù)使用格式如下:

$(notdir <names>)

函數(shù)說明:函數(shù)的功能是從文件名序列 names 中取出非目錄的部分。非目錄的部分是最后一個(gè)反斜杠之后的部分。返回值為文件非目錄的部分。實(shí)例:

OBJ=$(notdir  a/b/c.cpp, aaa.cpp)
all:echo $(OBJ)

執(zhí)行 make 命令,

wohu@ubuntu:~/cpp/func$ make
echo c.cpp, aaa.cpp
c.cpp, aaa.cpp
wohu@ubuntu:~/cpp/func$ 

3. 取后綴名函數(shù) suffix

函數(shù)使用格式如下:

$(suffix <names>)

函數(shù)說明:函數(shù)的功能是從文件名序列中 names 中取出各個(gè)文件的后綴名。返回值為文件名序列 names 中的后綴序列,如果文件沒有后綴名,則返回空字符串。實(shí)例:

OBJ=$(suffix  a/b/c.cpp, demo)
all:echo $(OBJ)

執(zhí)行 make 命令,

wohu@ubuntu:~/cpp/func$ make
echo .cpp,
.cpp,
wohu@ubuntu:~/cpp/func$ 

4. 取前綴函數(shù) basename

函數(shù)使用格式如下:

$(basename <names>)

函數(shù)說明:函數(shù)的功能是從文件名序列 names 中取出各個(gè)文件名的前綴部分。返回值為被取出來的文件的前綴名,如果文件沒有前綴名則返回空的字符串。實(shí)例:

OBJ=$(basename  a/b/c.cpp, demo.o)
all:echo $(OBJ)

執(zhí)行 make 命令

wohu@ubuntu:~/cpp/func$ make
echo a/b/c demo
a/b/c demo
wohu@ubuntu:~/cpp/func$ 

5. 添加后綴名函數(shù)

函數(shù)使用格式如下:

$(addsuffix <suffix>,<names>)

函數(shù)說明:函數(shù)的功能是把后綴 suffix 加到 names 中的每個(gè)單詞后面。返回值為添加上后綴的文件名序列。實(shí)例:

OBJ=$(addsuffix .cpp, c.cpp demo)
all:echo $(OBJ)

執(zhí)行 make

wohu@ubuntu:~/cpp/func$ make
echo c.cpp.cpp demo.cpp
c.cpp.cpp demo.cpp
wohu@ubuntu:~/cpp/func$ 

我們可以看到如果文件名存在后綴名,依然會(huì)加上。

6. 添加前綴名函數(shù) addperfix

函數(shù)使用格式如下:

$(addperfix <prefix>,<names>)

函數(shù)說明:函數(shù)的功能是把前綴 prefix 加到 names 中的每個(gè)單詞的前面。返回值為添加上前綴的文件名序列。實(shí)例:

OBJ=$(addprefix src/, demo1.cpp demo2.cpp)
all:echo $(OBJ)

執(zhí)行 make 命令,

wohu@ubuntu:~/cpp/func$ make
echo src/demo1.cpp src/demo2.cpp
src/demo1.cpp src/demo2.cpp
wohu@ubuntu:~/cpp/func$ 

可以使用這個(gè)函數(shù)給我們的文件添加路徑。

7. 鏈接函數(shù) join

函數(shù)使用格式如下:

$(join <list1>,<list2>)

函數(shù)說明:函數(shù)功能是把 list2 中的單詞對(duì)應(yīng)的拼接到 list1 的后面。

如果 list1 的單詞要比 list2 的多,那么,list1 中多出來的單詞將保持原樣,如果 list1 中的單詞要比 list2 中的單詞少,那么 list2 中多出來的單詞將保持原樣。返回值為拼接好的字符串。實(shí)例:

OBJ=$(join aa bb, cc dd ee)
all:echo $(OBJ)

執(zhí)行 make 命令,

wohu@ubuntu:~/cpp/func$ make
echo aacc bbdd ee
aacc bbdd ee
wohu@ubuntu:~/cpp/func$ 

我們可以得到的值是 aacc bbdd ee。很顯然 list1 中的文件名比 list2 的少,所以多出來的保持不變。

8. 獲取匹配模式文件名函數(shù) wildcard

命令使用格式如下:

$(wildcard PATTERN)

函數(shù)說明:函數(shù)的功能是列出當(dāng)前目錄下所有符合模式的 PATTERN 格式的文件名。返回值為空格分隔并且存在當(dāng)前目錄下的所有符合模式 PATTERN 的文件名。實(shí)例:

OBJ=$(wildcard *.cpp *.h)
all:echo $(OBJ)

執(zhí)行 make 命令,可以得到當(dāng)前函數(shù)下所有的 .cpp.h 結(jié)尾的文件。

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$ 

這個(gè)函數(shù)通常跟的通配符 * 連用,使用在依賴規(guī)則的描述的時(shí)候被展開(在這里我們的例子如果沒有 wildcard 函數(shù),我們的運(yùn)行結(jié)果也是這樣,echo 屬于 shell 命令,在使用通配符的時(shí)通配符自動(dòng)展開,我們這里只是相要說明一下這個(gè)函數(shù)在使用時(shí),如果通過引用變量出現(xiàn)在規(guī)則中要被使用)。

總結(jié)

以上是生活随笔為你收集整理的浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。