Makefile自動化變量


學(xué)習(xí)筆記阅爽,摘自陳皓的《跟我一起寫 Makefile》

Makefile規(guī)則

Makefile文件由一系列規(guī)則構(gòu)成谅河。每條規(guī)則的形式如下:

<target> : <prerequisites>
[tab] <command>
  • 第一行冒號前面的部分行施,叫做“目標”延刘,冒號后面的部分叫做“依賴條件”;
  • 第二行必須由一個tab鍵開始极谊,后面跟著“命令”诡右。

模式規(guī)則

可以使用模式規(guī)則來定義一個隱含規(guī)則。一個模式規(guī)則像一個一般的規(guī)則轻猖,只是在規(guī)則中帆吻,目標的定義需要有“%”字符。它的意思是表示一個或多個任意字符咙边。在依賴目標中同樣可以使用“%”猜煮,只是依賴目標中的“%”的取值,取決于其目標败许。也就是說王带,目標中的模式的“%”決定了依賴目標中“%”的樣子。如:

    %.o : %.c

其含義是市殷,指出了怎么從所有的[.c]文件生成相應(yīng)的[.o]文件的規(guī)則愕撰。

自動化變量

所謂自動化變量,就是這種變量會把模式中所定義的一系列的文件自動地挨個取出被丧,直到所有的符合模式的文件都取完了。這種自動化變量直營出現(xiàn)在規(guī)則的命令中绪妹。


目標
$@
表示規(guī)則中的目標文件集甥桂。在模式規(guī)則中,如果有多個目標邮旷,那么黄选,"$@"就是匹配與目標中模式定義的集合。

$%
僅當目標是函數(shù)庫文件時,"$%"表示規(guī)則中的目標成員名办陷。如:如果目標是"foo.a(bar.o)"貌夕,那么,"$%"就是"bar.o","%@"就是"foo.a"民镜。如果目標不是函數(shù)庫文件啡专,那么其值為空。

$<
依賴目標中的第一個目標名字制圈。如果依賴目標是以模式(即"%")定義的们童,那么"%<"將是符合模式的一系列的文件集。注意鲸鹦,其是一個個取出來的慧库。


依賴目標
$?
所有比目標新的依賴目標的集合。以空格分隔馋嗜。

$^
所有的依賴目標的集合齐板。以空格分隔。如果在依賴目標中有多個重復(fù)的葛菇,那么這個變量會取出重復(fù)的依賴目標甘磨,只保留一份。

$+
這個變量很像"$^"熟呛,也是所有依賴目標的幾何宽档。只是它不去除重復(fù)的依賴目標。

$*
這個變量表示目標模式中"%"及之前的部分庵朝。如果目標的模式是"a.%.b"吗冤,那么,"$*"的值是"dir/a.foo"九府。這個變量對于構(gòu)造有關(guān)聯(lián)的文件名是比較有效椎瘟。
如果目標中沒有模式的定義,那么"$*"也就不能被推導(dǎo)出來侄旬,但是肺蔚,如果目標文件的后綴是make所識別的,那么"$*"的值就是"foo"儡羔。這個特性是GNU make的宣羊,很有可能不兼容其它版本的make,所以應(yīng)盡量避免使用"$*"汰蜘。
如果目標中的后綴是make所不能識別的仇冯,那么"$*"就是空值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末族操,一起剝皮案震驚了整個濱河市苛坚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖泼舱,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件等缀,死亡現(xiàn)場離奇詭異,居然都是意外死亡娇昙,警方通過查閱死者的電腦和手機尺迂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涯贞,“玉大人枪狂,你說我怎么就攤上這事∷斡妫” “怎么了州疾?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長皇拣。 經(jīng)常有香客問我严蓖,道長,這世上最難降的妖魔是什么氧急? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任颗胡,我火速辦了婚禮,結(jié)果婚禮上吩坝,老公的妹妹穿的比我還像新娘毒姨。我一直安慰自己,他們只是感情好钉寝,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布弧呐。 她就那樣靜靜地躺著,像睡著了一般嵌纲。 火紅的嫁衣襯著肌膚如雪俘枫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天逮走,我揣著相機與錄音鸠蚪,去河邊找鬼。 笑死师溅,一個胖子當著我的面吹牛茅信,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播墓臭,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蘸鲸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了起便?” 一聲冷哼從身側(cè)響起棚贾,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榆综,沒想到半個月后妙痹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡鼻疮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年怯伊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片判沟。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡耿芹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挪哄,到底是詐尸還是另有隱情吧秕,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布迹炼,位于F島的核電站砸彬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏斯入。R本人自食惡果不足惜砂碉,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刻两。 院中可真熱鬧增蹭,春花似錦、人聲如沸磅摹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偏瓤。三九已至杀怠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厅克,已是汗流浹背赔退。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留证舟,地道東北人硕旗。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像女责,于是被迫代替她去往敵國和親漆枚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 來自陳浩的一片老文抵知,但絕對營養(yǎng)墙基。 示例工程:3 個頭文件*.h软族,和 8 個 C 文件*.c。 初 編譯過程残制,源文件...
    周筱魯閱讀 4,704評論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理立砸,服務(wù)發(fā)現(xiàn),斷路器初茶,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • makefile關(guān)系到整個工程的編譯規(guī)則颗祝,一個工程中的源文件不計其數(shù),按其類型恼布、功能螺戳、模塊分別放在若干的目錄當中,...
    Joe_HUST閱讀 1,884評論 0 3
  • 本文章介紹了makefile跟kconfig文件折汞,包括編譯過程與makefile編碼規(guī)則倔幼。 編譯過程:我們在進行l(wèi)...
    超低空閱讀 17,456評論 0 5
  • @(linux 編程)[開發(fā)技能, 工具使用] What is GNU Make Make 是控制工程中通過源碼生...
    orientlu閱讀 11,351評論 0 26