常用gcc(GNU Compiler Collection)指令說明
設定編譯出的 object 檔檔名或是可執行檔檔名-o
參數: -o out_put_filename
在編譯過程做最佳化-O
參數: -O
設定搜尋標頭檔目錄-I
參數: -Idir_name
設定搜尋程式庫目錄-L
參數: -Ldir_name
設定程式庫檔案-l
參數: -lname
提供進一步的資訊
以便使用者找尋程式中的錯誤-Wall
參數: -Wall
在編譯出可執行檔時,附加執行時除錯資訊,
以供 gdb 讀取
(若要使用 ABSoft 的除錯程式,則須將參數改為 -gdwarf )-g
參數: -g
# 在進行 binary file 製作時,將連結的函式庫與相關的路徑填入
[root@linux ~]# gcc sin.c -lm -L/usr/lib -I/usr/include
# 這個指令較常下達在最終連結成 binary file 的時候,
# -lm 指的是 libm.so 或 libm.a 這個函式庫檔案;
# -L 後面接的路徑是剛剛上面那個函式庫的搜尋目錄;
# -I 後面接的是原始碼內的 include 檔案之所在目錄。
make 常用的變數$?
代表需要重建(被修改)的相依性項目。$@
目前的目標項目名稱。$<
代表目前的相依性項目。$*
代表目前的相依性項目,不過不含副檔名。
看一個例子:
objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
展開後等同於
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o : bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o
這個例子,指明了我們的目標從$object 中取得。
「%.o」表明要所有以「.o」結尾的目標,也就是「foo.o bar.o」,也就是變數$object 集合的形式。
而依賴「%.c」則取形式「%.o」的「%」,也就是「foo bar」,並為其加下「.c」的結尾,簡單的說就是以[.c]取代[.o]。
於是我們的依賴檔案就是「foo.c bar.c」。
而命令中的「$<」和「$@」則是自動化變數,「$<」表示所有的依賴目標集,也就是「foo.c bar.c」,「$@」表示目標集,也就是「foo.o bar.o」。
更多的說明
man gcc
info gcc
參考資料
wiki GCC
http://en.wikipedia.org/wiki/GNU_Compiler_Collection
留言列表