makefile中的變量與bash中的變量酸休,語(yǔ)法稍有不同,makefile變量的基本語(yǔ)法為:
變量之間用 = 隔開(kāi)飘诗,且 = 兩側(cè)可以有空格
變量左邊不可以有鍵空格
習(xí)慣上變量以大寫(xiě)字母
引用變量使用大括號(hào)或括號(hào)赡勘,如(變量)
$@表示當(dāng)前的目標(biāo)
為了避免與名為clean的文件沖突,最好在clean前面加.PHONY
makefile是這樣定義的念赶。
target ...: prerequisites
command
command
target代表的是一個(gè) 標(biāo)的础钠,prerequisites代表的是這個(gè)標(biāo)的所依賴(lài)的標(biāo)的恰力,下面那個(gè)command就是生成這個(gè)標(biāo)的的命令。
那么那個(gè)標(biāo)的代表的是什么呢旗吁?其實(shí)它就是代表了一個(gè)與他同名的文件踩萎,編譯之后生成的.o文件,編譯鏈接之后生成的可執(zhí)行文件或者其他任何類(lèi)型的文件很钓,例如main這個(gè)標(biāo)的代表的就是main這個(gè)可執(zhí)行文件香府。
exp:
main:
gcc -o main main.c
它做的工作是這樣的:
1.查找makefile,默認(rèn)執(zhí)行第一個(gè)標(biāo)的(即main)码倦。
2.檢查main這個(gè)文件存不存在或者需不需要更新企孩。
3.如果main文件不存在,則執(zhí)行下面那個(gè)gcc命令來(lái)生成這個(gè)文件袁稽。
4.如果main文件已經(jīng)存在勿璃,且它的修改時(shí)間要早于依賴(lài)文件的修改時(shí)間(即這個(gè)main文件過(guò)期了),那么執(zhí)行下面的gcc命令來(lái)生成這個(gè)文件推汽。
總結(jié)一下:
- 1.makefile中的每個(gè)標(biāo)的都代表了一個(gè)文件补疑。
- 2.如果只運(yùn)行make命令,那么默認(rèn)執(zhí)行第一個(gè)標(biāo)的歹撒。
- 3.執(zhí)行一個(gè)標(biāo)的時(shí)莲组,會(huì)做兩件事情:
- 3.1.查看與這個(gè)標(biāo)的同名的文件是否存在,如果不存在暖夭,那么就運(yùn)行這個(gè)標(biāo)的下面的命令锹杈。
- 3.2.如果與這個(gè)標(biāo)的同名的文件已經(jīng)存在撵孤,那么就檢查與這個(gè)標(biāo)的同名的文件是否需要更新(即標(biāo)的文件的修改時(shí)間是否早于依賴(lài)文件的修改時(shí)間),如果需要更新竭望,那么就運(yùn)行這個(gè)標(biāo)的下面的命令早直。