1. 程式人生 > >make file 和 GCC標誌學習

make file 和 GCC標誌學習

tomat 所有 相等 ria 程序 pac depend extra gdb

GCC:

-Wall : 打開警告標誌

-std=standard : -ansi 相等 -std=c89

-ansi : 指定代碼應該符合什麽標準。

-c : Compile and assemble, but do not link.

[-Dmacro[=defn]...] : 定義宏

-S gcc -S sum.c -o sum.s 要求 gcc 產生組合語言程式碼
-E gcc -E hello.c -o hello.i 只執行巨集展開, 但不產生目的檔
-D gcc -DDEBUG sum.c -o sum 定義 #define DEBUG 後才編譯
-g gcc -g sum.c -o sum 編譯時加入除錯資訊, 讓 gdb 可遠端除錯
-c gcc -c hello.c -o hello.o 編譯並組譯程式碼, 但不做連結
-I gcc -c -I /home/ccc/include -o hello.o hello.c 指定引用檔 (*.h) 的路徑
-L gcc -L /home/ccc/lib -o hello hello.o 指定函式庫 (*.a) 的路徑
-l gcc -L /home/ccc/lib -lm -lpthread -o hello hello.o 指定函式庫的名稱
-shared gcc -shared a.o b.o c.o -o libabc.so 產生共享函式庫 (*.so)
-fPIC gcc -g -rdynamic -fPIC -o test test.c 輸出 position-independent code, 一般在輸出動態連結函式庫時使用
-Werror gcc -Werror sum.c -o sum.s 將警告視為錯誤, 一旦有警告就不輸出目標檔
-O0 gcc -S -O0 sum.c -o sum.s 不進行最佳化 (預設)
-O1 gcc -S -O1 sum.c -o sum.s 第 1 級的最佳化 (較差)
-O2 gcc -S -O2 sum.c -o sum.s 第 2 級的最佳化
-O3 gcc -S -O3 sum.c -o sum.s 第 3 級的最佳化 (最高等級)
-dr gcc -c -dr sum.c -o sum.o 輸出 RTL 中間碼


make file:

https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html

% 萬用字元、$@ 特殊符號、.PHONY 假目標

$@ 代表工作目標. The file name of the target of the rule.

$^ 代表所有的必要條件

$< 代表第一個必要條件. The name of the first prerequisite.

$? The names of all the prerequisites that are newer than the target, with spaces between them.

$% The target member name, when the target is an archive member.

從1文件夾裏面的makefile開始,

然後包含了$(ROOT)/Make.defines.$(PLATFORM)這個平臺的makefile,他裏面主要定義了:根據這個例子,理解APUE的編譯,那就是

CC是編譯器,COMPILE.c是編譯器.c文件的選項,LINK.c是鏈接.c文件的編譯選項,LDFLAGS是庫文件夾的位置,LDLIBS是外部庫的所有對象(EXTRALIBS沒看到定義),CFLAGS是編譯的標誌

然後在1的makefile中,定義了,如何編譯這個程序。

最後包含$(ROOT)/Make.libapue.inc這個makefile文件,在這個文件裏面,是進入lib這個文件夾,並且進行編譯,

在$(ROOT)/lib的makefile文件裏面,進行了下面的工作, 在這裏面,進行了真正的編譯靜態庫的工作。


AR的參數:

http://blog.csdn.net/zougangx/article/details/3073604

http://www.voidcn.com/blog/yangruibao/article/p-635550.html

-r  將文件插入備存文件中。

v  程序執行時顯示詳細的信息。

make file 和 GCC標誌學習