常用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

arrow
arrow
    全站熱搜

    BB 發表在 痞客邦 留言(0) 人氣()