今天晚上把LINUX下面的編程相關的工具熟悉了一下,主要有VI,Emacs,GCC,GDB,Makefile,autotools。初涉
LINUX,上述工具其實任取一個都不是一時半會能整精熟的,但是往往每一種工具都有一些使用頻率高達70%的命令。練習了一晚,對常見用法做個小結,鞏
固記憶。
一,VI:常用的原始碼編輯命令。
vi hello.c 在目前的目錄下產生hello.c,並進入命令模式
在命令模式下
,不能輸入,可以完成刪除,複製,粘貼等操作。
1)按i 或a或o進入插入模式,可以鍵入字元,一般用i; a與o稍有不同。
2)鍵dd刪除游標所在行
3)數字(n)+dd刪除游標開始向下n行
4)數字(n)+yy複製游標開始向下n行
5) p 粘貼到游標處
6)u 撤消上次操作
在插入模式下,按ESC進入底行模式,主要進行存檔和退出之類的操作
1) :wq 最常用,儲存並退出
2):w [filename] 儲存或另存
3):q! 強退出VI
二 gcc常見用法:
1)gcc -E hello.c -o hello.i //預先處理
2)gcc -S hello.i -o hello.s //編譯成組合語言檔案
3)gcc -c hello.s -o hello.o //彙編成目標代碼
4)gcc -c hello.c -o hello.o //直接產生目標代碼檔案<最常用>
5)gcc hello.c -o hello //直接產生可執行檔
6)gcc hello1.o hello2.o -o hello //連結產生可執行檔<最常用>
常見選項
:
1) -g 產生GDB調試資訊,用GDB工具此項必有
2) -I dir 編譯過程中包括指定目錄下的標頭檔
3) -L dir 可能需要到dir處連結庫檔案
4) -llibrary 連結動態libaray庫。通常不帶庫名的前三個字母(lib),如 -lhello表示連結libhello.so動態庫
5)-static 連結靜態庫
6) -Wall 允許所有有用的警告
7) -O (-O2或-O3)進行代碼最佳化(分三級) ,一般不用在調試階段
三 Gdb調試常見用法
gdb hello 進入調試 。編譯時間一定帶-g選項。
常用操作:
1) l (list) 查看原始碼
2) b(breakpoint) n :在第n 行設定斷點
3) r (run) 運行
4) n(next) 逐步執行,不進入函數內部,相當於VC下F10
5) s(step) 逐步執行,進入函數內部,相當於F11
6) c(contiue) 繼續執行,從當前運行處到下一個斷點或者程式結束。
7) p var :查看變數var的當前值
8)finish 運行到程式結束
跟斷點相關的有用命令
:
1)info b 查看所有設定的斷點的相關資訊
2) b function 在function函數所在行設定斷點
3) b 行數或函數名 if 運算式 滿足運算式時運行中斷 <感覺比較重要>
4) delete [斷點號] 刪除
5)disable [斷點號] 禁用
6)enable[斷點號]啟用
若不帶斷點號,則命令對所有斷點號用效,斷點號可用info b得到。
7)ignore [斷點號] N 忽略斷點N次,對迴圈一類的程式有用。
查看運行過程中變數的有用命令
:
print 運算式或變數
display 運算式 ,聽說能自動顯示對應運算式內容 (還沒試過)
修改變數命令
:
set var=value 設定變數值。
四 Makefile編寫
用於自動編譯產生目標或可執行檔,便於維護軟體工程的升級修改等。
基本格式
:
target : dependency_files
command
如:
hello.o: hello.c hello.h
gcc -c hello.c -o hello.o
Makefile變數
:
如:
OBJS=hello1.o hello2.o
CFLAGS=-Wall -O -g
CC=gcc
hello:$(OBJS)
$(CC) $(OBJS) -o hello
hello1.o:hello1.h hello1.c
$(CC) $(CFLAGS) -c hello1.c -o hello1.o
hello2.o:hello2.h hello2.c
$(CC) $(CFLAGS) -c hello2.c -o hello2.o
也可以用其隱式規則
,則hello1.o,hello2.o的產生均不用顯示寫出,對每個*.o目標代碼的產生自動套用下列規則:
*.o:*.c *.h
$(CC) $(CFLAGS) -c *.c -o *.o
自動變數的使用
$^: 表示所有的不重複依賴檔案
$<: 第一個依賴檔案
$@:目標檔案的全名
使用模式規則
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
Make 命令:
make 目標名 產生目標
make 產生第一個目標。
五 使用autotools :
自動產生Makefile檔案
1) 運行autoscan dir 或在目前的目錄下運行autoscan 。產生configure.scan
2)編輯configure.scan 添加宏:AM_INIT_AUTOMAKE(可執行檔名,版本號碼)
更名為configure.in
3)運行aclocal 得到aclocal.m4
4)運行autoconf 產生configure可執行檔
5)運行autoheader 負責產生config.h.in檔案 //此步不算重要。
6)建立並編輯Makefile.am檔案:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello (此處是可執行檔)
hello_SOURCES=hello.c hello.h (此處是依賴檔案)
儲存
7)運行automake 將Makefile.am 產生Makefile.in
8)運行configure可執行檔,將Makefile.in產生Makefile
9)運行make 即可產生hello
網上搜得其流程圖如下:
autotools 產生的Makefile主要功能
:
1.make [all] 產生可執行檔
2 make install 產生可執行檔,並安裝到系統目錄如/usr/local/bin下。
3 make clean 清除之前編譯產生的所有可執行檔及目標檔案*.o
4 make dist 將程式與文檔打包供發布