Linux下gcc與g++用法以及編寫makefile

(本文主要以gcc爲演示,如果是C++程序直接將給 gcc改爲g++即可)
1.         gcc與g++編譯流程:
1)         編譯流程:

2)         預處理:生成.i的預處理文件。
Ø 只激活預處理,這個不生成文件,需要把它重定向一個輸出文件。
Ø 演示:

3)         編譯:生成.s的編譯文件。
Ø 只激活預處理和編譯,把文件編譯成彙編代碼。
Ø 演示:

4)         彙編:生成.o的彙編文件。
Ø 只激活預處理、編譯和彙編,把程序做成obj文件。
Ø 演示:

5)         鏈接:生成鏈接文件。
Ø 激活預處理、編譯、彙編和鏈接。
Ø 演示:

6)         慣用:

2.         gcc與g++常用參數介紹:
1)         -E
Ø -E選項指示編譯器僅對輸入文件進行預處理。當這個選項被使用時,預處理器的輸出被送到標準輸出而不是儲存在文件裏。
Ø 演示:

2)         -S
Ø -S選項告訴GCC在爲C代碼產生了彙編語言文件後停止編譯。GCC產生的彙編語言文件的缺省擴展名是.s。
Ø 演示:

3)         -c
Ø -c選項告訴GCC僅把源代碼編譯爲目標代碼。缺省時GCC建立的目標代碼文件有一個.o的擴展名。
Ø 演示:

4)         -o
Ø -o選項來爲將產生的可執行文件用指定的文件名。
Ø 演示:

5)         -O
Ø -O選項告訴GCC對源代碼進行基本優化,這些優化在大多數情況下都會使程序執行的更快,優化分爲4個等級(-O0,-O1,-O2,-O3)。
-O0表示沒有優化。
-O1爲缺省值,主要進行跳轉和延遲退棧兩種優化。
-O2除了完成-O1的優化之外,還進行一些額外的指令調整工作。
-O3除了完成-O2的優化之外,還進行包括循環展開和其他一些與處理特性相關的優化工作。
Ø 演示:

其他優化等級的用法與演示中-O3的用法一樣。
6)         -x
Ø 設定文件編譯所使用的語言,使後綴名無效。
Ø 演示:

7)         -C
Ø 在預處理的時候,不刪除註釋信息。
Ø 演示:

8)         -M
Ø 生成文件關聯信息。包含目標文件所依賴的所有源代碼。
Ø 演示:

2.         編寫makefile:
1)         編寫一個程序:
Ø 共5個文件,3個.cpp文件,2個.h文件。
Ø main.cpp:

 

Ø printf1.cpp:

 

Ø printf1.h:

 

Ø printf2.cpp:

 

Ø printf2.h:

Ø 常規編譯:
彙編main.cpp:

彙編printf1.cpp

彙編printf2.cpp

將3個obj文件鏈接到一個文件上:

運行:

總共生成的文件:

2)         運用makefile文件:
Ø 優點:
由上例可知,照這樣的編譯方法,如果是一個項目的話,可能存在上百個文件,豈不是太麻煩了,所以要把編譯過程寫進一個文件中:makefile。
Ø 編寫規則:
以#號開始的爲註釋
具體編譯過程:
對象:依賴項
編譯方式
makefile文本向右縮進時使用TAB鍵,不能用空格代替。
Ø 編寫(以上面得程序爲例):
創建makefile文件:

編寫makefile文件:
常用寫法:

前三行類似一個變量的定義,取值時使用$(定義值)來取值。
也可以寫成:

等價於上面的寫法,缺點是文件一旦過多,修改也不容易。
運行makefile文件:

生成的文件:

運行目標文件:

刪除生成文件:

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