gcc GNU下的編譯連接工具套組函數
源文件爲 test.c 一個完整的編譯連接生成test文件的過程以下工具
gcc -E -o test.i test.c # 預處理 .c->.i優化
gcc -S -o test.S test.i # 編譯 .i->.S調試
gcc -c -o test test.S # 彙編連接 .S->.ocode
其餘參數源碼
-O[0|1|2|3] 優化等級自動化
-L DIR 連接目錄io
-l FILE連接文件 不須要加空格編譯
-w 禁止全部警告class
-Wall 顯示全部警告
makefile 自動化編譯連接工具
make 自動檢索makefile|Makefile|GNUmakefile文件來自動化編譯連接
-f 指定makefile的文件名
變量格式
OBJ = FILENAME|OTHER?
特殊變量
$@ 生成的目標文件 $^ 被依賴文件 $< 第一個被依賴文件
.PHONY: 僞目標文件列表 防止文件名與標籤衝突
一個例子
目錄結構以下
代碼以下
/* config.h */ #define TEST 404
/* func.c */ #include <stdio.h> #include "config.h" void func() { printf("#define TEST is %d\n", TEST); }
/* test.c */ #include <stdio.h> int main() { printf("hello world\n"); return 0; }
手動配置makefile文件
test: test.c func.c gcc -o test test.c func.c clean: rm test
利用特殊變量簡寫 並使用.PHONY防止文件名衝突
OBJ = test.c func.c test: $(OBJ) gcc -o $@ $^ .PHONY: clean clean: rm test
執行make命令 自動編譯連接生成可執行文件
執行make clean命令 刪除編譯連接產生的文件
當有多級子目錄時可以使用makefile的嵌套 例子以下
.PHONY: both both: a b c a: cd subdir1; make b: cd subdir2; make c: cd subdir3; make
也能夠下載一些自動化生成makefile的工具來生成makefile
最後生成的文件與下載安裝的源碼包文件很是類似
gdb 調試工具
編譯時使用gcc -g 選項才能使用gdb調試
gdb調試交互式命令
l 顯示源代碼
r 運行
c 繼續
b LINE 在指定行號設置斷點
bt 顯示調用棧
s 單歩執行[進入函數]
n 單歩執行[不進入函數]
p VAR 打印變量的值