gcc [option | filename]bash
一、預處理階段函數
gcc -E -o [目標文件] [編譯文件]工具
gcc -E -o hello.i hello.c優化
二、編譯階段ui
gcc -S -o hello.s hello.ispa
三、彙編階段線程
gcc -c hello.s -o hello.o調試
四、連接階段code
gcc hello.o -o hello遞歸
分爲Wall類 和 非Wall類
靜態庫(.a) 和 動態庫(.so和版本號組成)。庫都存放在/usr/lib 和 /lib 目錄中
例如:libm.so.5 標識符爲m,版本號爲 5,
二、相關路徑選項
1) -I<dir>
改變搜索路徑
gcc hello.c -I/root/workspace/gcc/ -o hello
2) -L<dir>
用於指明庫文件的路徑。
例如:程序hello_sq.c須要用到目錄「/root/workspace/gcc/lib」下的一個動態庫libsunq.so,則
gcc hello_sq.c -L/root/workspace/gcc/lib -lsunq -o hello_sq
「-I<dir>" 和 「-L<dir>」都只是指定了路徑,而沒有指定文件,所以不能再路徑中包含文件名。
三、使用不一樣類型連接庫
選項「-l」(小寫的L),用於指定具體使用的庫文件。庫都是以「lib」開頭,只需填寫lib以後的內容。
若是libm.a和libm.so同時存在,默認連接共享庫。寫做「-lm」便可
若是選用靜態庫,則在「-l」以前添加選項「-static」。例如,連接libm.a庫文件的選項是「-static -lm」。
編譯選項 -On 控制優化代碼的生成,其中n是一個表明優化級別的整數。比較典型的範圍是從0到2或3。
優化選項-O 主要進行線程跳轉(Thead Jump)和延遲退棧(Deferred Stack Pops)兩種優化。
優化以後,難於調試。
功能:
#include <stdio.h> void add(int m) { int i,n = 0; for (i = 1; i <= m; i++) { n += i; } printf("The sum of 1-%d in add is %d\n", m, n); } int main() { int i,n = 0; add(50); for (i = 1; i <= 50; i++) { n += 1; } printf("The sum of 1-50 is %d \n", n); }
編譯時要加上「-g」選項。
一、進入GDB
#gdb test
二、查看文件
「l」(list)查看程序的源碼
三、設置斷點
在 「b」 後加入對應的行號便可
(gdb) b 6
四、查看斷點處狀況
(gdb) info b
五、運行代碼
GDB默認從首行開始運行代碼,鍵入「r」(run)便可
六、查看變量值
「p 變量值」
(gdb) p n $1 = 0 (gdb) p i $2 = 1345
「$N」標記,當前變量值的引用標記。
七、觀察變量
在某循環處,「watch」來觀察變量的變化狀況
(gdb) watch n
八、單步運行
「n」(next)便可
九、程序繼續運行
「c」(continue)繼續運行,直到遇到斷點或程序結束
十、退出GDB
「q」(quit)便可退出
Makefile是make讀入的惟一配置文件。
一般包含以下內容:
格式爲:
target: dependency_files /t command
#The simplest example hello.o: hello.c hello.h /t gcc -c heelo.c -o hello.o
接着就可使用make了。使用make的格式爲:make target,這樣make就會自動讀入Makefile執行對應target的command語句,並會找到相應的依賴文件。
#make hello.o gcc -c hello.c -o hello.o #ls hello.c hello.h hello.o Makefile
在Makefile中的每個command前必須有「Tab」符。
1.5.二、Makefile變量
定義的名字,用來代替一個文本字符串,該文本字符串稱爲該變量的值。
變量的值能夠用來代替目標體、依賴文件、命令及Makefile文件中的其餘部分。在Makefile中的變量定義有兩種方式:一種是遞歸展開方式,另外一種是簡單方式。
遞歸展開方式定義的變量是在引用該變量時進行替換的,即若是該變量包含了對其餘變量的引用,則在引用該變量時一次性將內嵌的變量所有展開。
簡單擴展型變量的值在定義處展開,且只展開一次,消除了變量的嵌套引用。
遞歸展開方式的定義:VAR=var
簡單擴展方式的定義:VAR:=var
make中變量的使用格式爲:$(VAR)
變量名是大小寫敏感的。推薦使用小寫字母
Makefile中的變量分爲用戶自定義變量、預約義變量、自動變量及環境變量。
預約義變量包含了常見編譯器、彙編器的名稱及編譯選項。
CC=gcc testgdb01.o: testgdb01.c testgdb01.h $(CC) -c testgdb01.c -o testgdb01.o clean: $(RM) testgdb01.o
自動變量一般能夠表明編譯語句中出現的目標文件和依賴文件等,而且具備本地含義。
make在啓動時會自動讀取系統當前已經定義了的環境變量,而且會建立與之具備相同名稱和數值的變量。
Makefile的規則包括目標體、依賴文件及其間的命令語句,是make進行處理的依據。Makefile中的一條語句就是一個規則。
make還定義了隱式規則和模式規則。
一、隱式規則
隱式規則可以告訴make怎麼使用傳統的技術完成任務。
隱式文件只能查找相同文件名的不一樣擴展名文件。
二、模式規則
隱式規則僅僅可以用make默認的變量來進行操做。
模式規則是用來定義相同處理規則的多個文件的,模式規則能引入用戶自定義變量,爲多個文件創建相同的規則,簡化Makefile的編寫。
模式規則的格式相似於普通規則,這個規則中的相關文件前必須用「%」標明。
直接運行make,則創建Makefile中的第一個目標。