Linux工具 gcc makefile gdb

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 打印變量的值

相關文章
相關標籤/搜索