make使用的規則,變數等

2021-05-24 13:43:04 字數 1848 閱讀 3064

1.makefile的規則

很多時候我們要編譯的檔案都是很大的,而這就要求我們可能去開啟檔案的原始碼自己去發現關係,這樣做是繁瑣的,也不能保證其正確性。我們當然希望能都自動表達檔案的依賴關係,編譯器可以做這個工作。當編譯器做這個工作時,他能知道應該包含什麼樣子的標頭檔案,當使用gcc時,用-m開關,它可以為每乙個輸入的c檔案輸出乙個依賴關係,gcc將要生成的目標檔案作為makefile規則的目標檔案,而把生成這個目標檔案的c原始檔和所有應該被應用的標頭檔案作為依賴檔案。

舉個例子哈:

gcc -m hello.c f2.c

這時就能由gcc生成對應的關係並表示在螢幕中,如:

這個命令不僅包含了自己的.h檔案,而且還包含了系統額庫函式,使用-mm命令可以不顯示系統函式,這樣就使得脈絡清晰多了~

gcc -mmhello.c f2.c

2.變數in makefile

makefile裡面的變數就像是乙個環境變數,我的感覺其實就是用乙個巨集將一串字串給代表了。這些變數對大小寫敏感,一般使用大寫的字母,幾乎可以從任何地方引用定義的變數,變數的主要作用如下:

makefile中的變數使用乙個字串

在makefile中定義的,這個字串就是變數的值,語法:

變數名=字串

使用時將變數名括起來,我就直接舉例子了:

objt=hello.o f2.o;記著變數一定都是大寫的,這樣的話如果碰到關係發生變化,直接修改這個就行了。

這樣就方便維護了 也就是上面兩個點後面文字的意思~

現在我吧makefile裡面的檔案內容用這個變數方式重寫一次

make clean;就會呼叫了rm -f test *.o;這個命令,就把剛才生成的鏈結檔案和可執行檔案都刪除了。

makefile中定義了一些預設變數,這些變數具有特殊的含義,可在規則中使用。

預定義變數                      含義

$* 不包含副檔名的目標檔名稱。

$+ 所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案。

$< 第乙個依賴檔案的名稱。

$? 所有的依賴檔案,以空格分開,這些依賴檔案的修改日期比目標的建立日期晚。

$@ 目標的完整名稱。

$^ 所有的依賴檔案,以空格分開,不包含重複的依賴檔案。

$% 如果目標是歸檔成員,則該變數表示目標的歸檔成員名稱。例如,如果目標名稱

為 mytarget.so(image.o),則 $@ 為 mytarget.so,而 $% 為 image.o。

ar 歸檔維護程式的名稱,預設值為 ar。

arflags 歸檔維護程式的選項。

as 匯程式設計序的名稱,預設值為 as。

asflags 匯程式設計序的選項。

cc c 編譯器的名稱,預設值為 cc。

ccflags c 編譯器的選項。

cpp c 預編譯器的名稱,預設值為 $(cc) -e。

cppflags c 預編譯的選項。

cxx c++ 編譯器的名稱,預設值為 g++。

cxxflags c++ 編譯器的選項。

fc fortran 編譯器的名稱,預設值為 f77。

fflags fortran 編譯器的選項。"

make的簡單使用規則

make的使用 1.make基本使用規則 make在使用時可以根據一系列預先設定的規則來執行。這些設定的規則可以記錄在乙個檔案中,預設該檔案的名字是makefile。make的使用形式為 make option macrodef target option指出make的工作行為,make的主要選項有...

make和Makefile中的規則和變數

make機制的執行環境需要乙個命令列程式make和乙個文字檔案makefile。make命令執行後有3個退出碼 make的使用格式是 make options target options為make工具的引數選項,target為makefile中指定的目標。make 工具的引數選項 選項含義 f f...

變數的使用規則

定義乙個成員變數時,成員變數將被放置到記憶體中,如果成員變數的作用域擴大到類存在的範圍或者物件存在範圍,壞處有 增大了變數的生存時間,這將導致更大的系統開銷 擴大了變數的作用域,不利於提高程式的內聚性。public class testscope1 定義乙個成員變數做為迴圈變數 static int...