【Linux系统编程学习】 Makefile简单入门
此為??途W(wǎng)Linux C++課程1.10&1.11&1.12 的課程筆記。
0. Makefile介紹
1. Makefile文件命名與規(guī)則
示例:
使用vim編寫(xiě)如下名為Makefile的文件:
首先看第一行,app是我們的目標(biāo)文件,冒號(hào)后面是生成該目標(biāo)文件所需要的依賴,第二行是我們要執(zhí)行的命令。
在使用sub.o add.o mult.o div.o main.o依賴時(shí),發(fā)現(xiàn)目錄中沒(méi)有對(duì)應(yīng)的.o文件,則向下尋找其他規(guī)則,執(zhí)行以生成其依賴。注意,如果下面的規(guī)則中與第一行所需的依賴無(wú)關(guān),則不會(huì)被執(zhí)行,也就是說(shuō)Makefile中的其他規(guī)則都是為第一條規(guī)則服務(wù)的。
2. 變量
有了變量我們寫(xiě)makefile就方便一些,比如我們之前的makefile就可以如此改寫(xiě):
把所有的依賴定義為src變量,把目標(biāo)文件名定義為target變量,然后用 $ 取值,其中 $ (CC)是預(yù)定義變量,表示C編譯器名稱(chēng);$^ 也是預(yù)定義變量,表示所有的依賴文件。
3. 模式匹配
原先是按左邊的方式寫(xiě)的,一個(gè)個(gè)寫(xiě)很麻煩,這里可以使用模式匹配,即通配符%,在同一規(guī)則中,%匹配同一個(gè)字符串。
如此以來(lái),之前的makefile可如此改寫(xiě):
src中的每一個(gè)依賴都可以匹配下面的這條規(guī)則。
4. 函數(shù)
現(xiàn)在通過(guò)模式匹配,避免了我們反復(fù)寫(xiě)規(guī)則,但是依賴文件我們還是要一個(gè)一個(gè)寫(xiě)在src里,有沒(méi)有辦法直接獲取這些文件的文件名呢?可以使用$(wildcard PATTERN…)函數(shù)。
舉例,當(dāng)前目錄如下:
假如我們想讓在makefile文件中獲得當(dāng)前目錄中所有.c文件的名稱(chēng),即可執(zhí)行:
src = $ (wildcard ./*.c )這樣就能獲得當(dāng)前目錄下所有.c文件的名稱(chēng)。
但是之前的示例代碼中需要的是與.c文件同名的.o文件,而目錄中沒(méi)有.o文件,我們可以使用$(patsubst < pattern>,< replacement>,< text>)函數(shù):
我們現(xiàn)在想要在makefile中獲得與目錄中.c文件同名的.o文件,便調(diào)用patsubst函數(shù)把獲得的.c文件進(jìn)行字符串替換即可.
該函數(shù)的作用簡(jiǎn)而言之就是把< text >中的匹配< pattern >的串用< replacement >代替。
其中< text >字段由剛才調(diào)用的src = $ (wildcard ./*.c )獲得,然后我們想將其中所有的.c都替換成.o,可將原來(lái)的makefile文件修改如下:
可實(shí)現(xiàn)與最初的示例程序相同的功能。
總結(jié)
以上是生活随笔為你收集整理的【Linux系统编程学习】 Makefile简单入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OPPOk9机型尺寸多少?
- 下一篇: 【Linux系统编程学习】 GDB调试器