linux下make工具使用系列1

一、概述

linux可以使用make來編譯,make是一個命令工具,一個解釋Makefile中命令的工具,各個廠商的make各不相同,也有不同的語法,但都在“文件依賴性”上做文章。詳細瞭解參考《GNU Make使用手冊》。
make可以根據文件更新的時間戳來判斷需要重新編譯哪些文件以及編譯的先後順序。

代碼變爲可執行文件分爲兩步:
1、編譯,轉爲中間文件,編譯時,編譯器需要的是語法的正確和函數/變量聲明的正確,只有這樣才能編譯通過,編譯出一箇中間目標文件;
2、鏈接,把中間文件合併成執行文件。鏈接時,主要是鏈接函數和全局變量。

二、規則樣式

基本的樣式如下:

目標:依賴
<tab>命令

hello:hello.c
<tab>gcc -o hello hello.c

其中的hello表示目標文件,hello.c表示目標文件欲生成所需要依賴的文件。gcc -o hello hello.c表示從hello.c生成hello可執行文件的命令。

目標也可以是一個標籤,如“clean”,其後可沒有依賴文件,稱爲“僞目標”,make不會自動執行該規則 的命令,要執行這種規則的命令,需要在make命令後明顯的指出標籤來,如make clean纔會執行clean對應的規則。

make會一層一層的尋找依賴關係,如果最終的依賴文件不存在,那麼make會退出。

其中如果依賴文件有一個比目標文件時間戳新,那麼命令就會執行。

三、變量定義

makefile中的變量是一個字符串,可以類比於C中的宏;
延時變量:當真正使用這個變量時才確定其值,使用“=”“?=”或者define定義爲延時變量;
立即變量:定義時已經確定其值,使用“:=”賦值;
如果賦值採用”+=”,則如果其右邊變量爲立即變量,則爲立即變量,否則是延時變量。

四、符號含義

1、$@:規則的目標文件名;
2、$^:規則的所有依賴文件;
3、$<:規則的第一個依賴文件;
4、%:通配符,和一個字符串中任意個數字符相匹配;
利用以上的符號替代之前的hello規則
原規則:

hello:hello.c
    gcc -o hello hello.c

利用符號替換,形式:

hello:hello.c
    gcc -o $@ $^
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章