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...