make file 和 GCC标志学习

Posted WenYao.Huang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了make file 和 GCC标志学习相关的知识,希望对你有一定的参考价值。

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

% 萬用字元、[email protected] 特殊符號、.PHONY 假目標

[email protected] 代表工作目標. 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标志学习的主要内容,如果未能解决你的问题,请参考以下文章

O2 中导致未定义符号的 gcc 优化标志

[An Introduction to GCC 学习笔记] 15 How the compiler works, Identifying files

[An Introduction to GCC 学习笔记] 15 How the compiler works, Identifying files

gcc 标志重复和排序重要吗?

python基础学习日志day9--线程event

在 Windows 上默认启用 GCC 编译器 C++11 标志