深入學習Make命令和Makefile(下) 3

2021-06-21 16:22:07 字數 980 閱讀 7098



三、字尾規則

前面我們已經看到,有些內部規則會根據檔案的字尾(相當於windows系統中的副檔名)來採取相應的處理。換句話說,這樣當make見到帶有一種字尾的檔案時,就知道使用哪些規則來建立乙個帶有另外一種字尾的檔案,最常見的是用以.c結尾的檔案來建立以.o結尾的檔案,即把原始檔編譯成目標程式,但是不連線。

現在舉例說明字尾規則的應用。有時候,我們需要在不同的平台下編譯原始檔,例如windows和linux。假設我們的源**是c++編寫的,那麼windows下其字尾則為.cpp。不過linux使用的make版本沒有編譯.cpp檔案的內部規則,倒是有乙個用於.cc的規則,因為在unix作業系統中c++副檔名通常為.cc。

這時候,要麼為每個原始檔單獨指定一條規則,要麼為make建立一條新規則,告訴它如何用.cpp為副檔名的原始檔來生成目標檔案。如果專案中的原始檔較多的話,字尾規則就可以派上用場了。要新增一條新字尾規則,首先在makefile檔案中加入一行來告訴make新字尾是什麼;然後就可以新增使用這個新字尾的規則了。這時,make要用到一條專用的語法:

.《舊字尾名》.《新字尾名》:

它的作用是定義一條通用規則,用來將帶有舊字尾名的檔案變成帶有新字尾名的檔案,檔名保持不變,如要將.cpp檔案編譯成.o檔案,可以使用乙個新的通用規則:

.suffixes: .cpp

.cpp.o:

$(cc) -xc++ $(cflags) -i$(include) -c $<

現在,make已經知道如何處理擴充套件名為.cpp的c++原始檔,除此之外,我們還可以通過字尾規則將檔案從一種型別轉換為另一種型別。不過,較新版本的make包含乙個語法可以達到同樣的效果。例如,模式規則使用%作為匹配檔名的萬用字元,而不單獨依賴於副檔名。以下模式規則相當於上面處理.cpp的規則,具體如下所示:

%.cpp: %o

$(cc) -xc++ $(cflags) -i$(include) -c $<

深入學習Make命令和Makefile(上)(1)

make是linux下的一款程式自動維護工具,配合makefile的使用,就能夠根據程式中模組的修改情況,自動判斷應該對那些模組重新編譯,從而保證軟體是由最新的模組構成。本文分為上下兩部分,我們將緊緊圍繞make在軟體開發中的應用展開詳細的介紹。深入學習make命令和makefile 下 一 都是原...

深入學習Make命令和Makefile(上) 3

五 makefile中的規則 除了指明目標和模組之間的依賴關係之外,makefile還要規定相應的規則來描述如何生成目標,或者說使用哪些命令來根據依賴模組產生目標。就上例而言,當make程式發現需要重新構建f1.o的時候,該使用哪些命令來完成呢?很遺憾,到目前為止,雖然make知道哪些檔案需要更新,...

深入學習Make命令和Makefile(下) 1

一 構建多個目標 有時候,我們想要在乙個makefile中生成多個單獨的目標檔案,或者將多個命令放在一起,比如,在下面的示例mymakefile3中我們將新增乙個clean 選項來清除不需要的目標檔案,然後用install選項將生成的應用程式移動到另乙個目錄中去。這個makefile跟前面的myma...