linux中的萬用字元指的是?

2021-09-13 04:14:06 字數 2188 閱讀 8316

*是應用在系統中的萬用字元,%是應用在這個makefile檔案中的萬用字元。

例如,如果你想編譯乙個資料夾下的所有.c檔案,你可能會這樣寫:

1 %.o:%.c

2     gcc -o $@ $<

但是如果整個檔案只有這兩行的話,就會出現這樣的錯誤:

make: *** target not found. stop.

要知道原因,我們先來看看另乙個makefile的執行過程,例如有makefile如下:

1 test1.o:test1.c

2 3     gcc -o test1.o test1.c

4 5  

6 test2.o:test2.c

7 8     gcc -o test2.o test2.c

9 10  

11 all:test1.o test2.o

如果沒有指定輸出專案的時候make會自動找到makefile中第乙個目標中沒有萬用字元的目標進行構造,

所以步驟是:

構造all,發現需要test1.o和test2.o

這個時候他就會在makefile檔案中找到目標能匹配test1.o和test2.o的規則。

找到test1.o的規則並且知道test1.c存在,執行下面的命令。

同步驟三構造出test2.o

現在構造all的原始檔已經齊全,構建all

其中最重要的是第2步。

makefile的萬用字元是在帶著目的(如「尋找test1.o」)的時候才會把他要尋找的目標套用萬用字元%中。

所以萬用字元%的意思是:

我要找test1.o的構造規則,看看makefile中那個規則符合。

然後找到了%.o:%.c,

來套一下來套一下:

%.o 和我要找的 test1.o 匹配

套上了,得到%=test1。

所以在後面的%.c就表示test1.c了。

ok進行構造

而萬用字元*的意思是:

我不知道目標的名字,系統該目錄下中所有字尾為.c的檔案都是我要找的。

然後遍歷目錄的檔案,看是否匹配。找出所有匹配的專案。

所以雖然連個符號的意思有點沾邊,但是他們的工作方式時完全不一樣。

現在知道了為什麼檔案中只有

1 %.o:%.c

2     gcc -o $@ $<

會找不到目標了吧。因為沒有-f引數時make會自動找到makefile中第乙個目標中沒有萬用字元的目標進行構造,所以就等於找不到目標了。它的意思並不會自動把檔案中所有的檔案都編譯。

所以正確的**應該是:

1 all:$(subst .c,.o,$(wildcard *.c))

2 3 %.o:%.c

4     gcc -o $@ $<

這才是把目錄下所有檔案都編譯的命令。

下面是幾個特殊符號的意思:

$@:目標的名字

$^:構造所需檔案列表所有所有檔案的名字

$<:構造所需檔案列表的第乙個檔案的名字

$?:構造所需檔案列表中更新過的檔案

例如:1 test1.o:test1.c

2gcc -o $@ $<

$@:就是test1.o

$<:就是test1.c

1 test1.o:test1.c head.c

2gcc -o $@ $^

$^:就是test1.c head.c

$(subst 要被替換的字串,用來替換的字串,被處理的字串):

用「用來替換的字串」替換「被處理的字串」中的「要被替換的字串」

所以:$(subst .c,.o,test1.c test2.c)

就會得到test1.o test2.o

$(wildcard 尋找的檔案):在系統中尋找檔案

例如:$(wildcard *.c)

就等於找到系統中所有字尾為.c的檔案,返回成以空格隔開的一整行字符

例如:test1.c test2.c test3.c 這樣

$(basename 檔名):取得檔案的名字(去掉字尾的意思)

例如:$(basename test1.c)

就會取得test1

Linux的shell指的是什麼

shell的含義 shell的英文含義是 殼 它是相對於核心來說的,因為它是建立在核心的基礎上,面向於使用者的一種表現形式,比如我們看到乙個球,見到的是它的殼,而非核。linux中的shell,是指 乙個面向使用者的命令介面,表現形式 就是乙個可以由使用者錄入的介面,這個介面也可以反饋執行資訊 sh...

Linux萬用字元

在使用shell命令對多個檔案物件執行單一操作時,例如刪除當前目錄下的file1到file8,多次使用相同的命令rm file1到rm file8非常麻煩,通常使用萬用字元模式解決這個問題 rm file 1 8 當使用萬用字元指定一種模式時,該模式與底層系統上的乙個或多個檔案匹配,shell以空格...

linux萬用字元

在您日常的 linux 使用中,有很多時候您可能需要一次對多個檔案系統物件執行單一操作 比如 rm 在這些 情況下,在命令列中輸入許多檔案通常讓人感到厭煩 rm file1 file2 file3 file4 file5 file6 file7 file8 為了解決這個問題,您可以利用 linux ...