makefile中的變量與bash中的變量,語法稍有不同,makefile變量的基本語法為:
變量之間用 = 隔開,且 = 兩側(cè)可以有空格
變量左邊不可以有鍵空格
習(xí)慣上變量以大寫字母
引用變量使用大括號或括號,如(變量)
$@表示當(dāng)前的目標(biāo)
為了避免與名為clean的文件沖突,最好在clean前面加.PHONY
makefile是這樣定義的。
target ...: prerequisites
command
command
target代表的是一個 標(biāo)的,prerequisites代表的是這個標(biāo)的所依賴的標(biāo)的,下面那個command就是生成這個標(biāo)的的命令。
那么那個標(biāo)的代表的是什么呢?其實它就是代表了一個與他同名的文件,編譯之后生成的.o文件,編譯鏈接之后生成的可執(zhí)行文件或者其他任何類型的文件,例如main這個標(biāo)的代表的就是main這個可執(zhí)行文件。
exp:
main:
gcc -o main main.c
它做的工作是這樣的:
1.查找makefile,默認(rèn)執(zhí)行第一個標(biāo)的(即main)。
2.檢查main這個文件存不存在或者需不需要更新。
3.如果main文件不存在,則執(zhí)行下面那個gcc命令來生成這個文件。
4.如果main文件已經(jīng)存在,且它的修改時間要早于依賴文件的修改時間(即這個main文件過期了),那么執(zhí)行下面的gcc命令來生成這個文件。
總結(jié)一下:
- 1.makefile中的每個標(biāo)的都代表了一個文件。
- 2.如果只運行make命令,那么默認(rèn)執(zhí)行第一個標(biāo)的。
- 3.執(zhí)行一個標(biāo)的時,會做兩件事情:
- 3.1.查看與這個標(biāo)的同名的文件是否存在,如果不存在,那么就運行這個標(biāo)的下面的命令。
- 3.2.如果與這個標(biāo)的同名的文件已經(jīng)存在,那么就檢查與這個標(biāo)的同名的文件是否需要更新(即標(biāo)的文件的修改時間是否早于依賴文件的修改時間),如果需要更新,那么就運行這個標(biāo)的下面的命令。