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  程序执行时显示详细的信息。

时间: 2024-08-05 06:26:07

make file 和 GCC标志学习的相关文章

gcc编译器学习

gcc编译器 -o [file] [origin_file] 将源代码文件编译生成file文件.如gcc -o hello hello.c,也可以直接将 gcc origin_file,那么gcc将会生成a.out文件. gcc编译器在编译一个C语言程序文件时需要经过4步: ² 将源程序文件经过预处理生成.i文件 ² 将.i文件进行汇编生成.s文件 ² 将.s文件编译生成.o文件 ² 将各个模块的.o文件链接生成程序可执行文件 gcc编译器中的几种常用的编译选项: a) -c  编译.汇编指定的

File类的深度学习(超简易文件管理器)——《Thinking in Java》随笔028

1 //: MakeDirectories.java 2 package c10; 3 4 import java.io.File; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 8 /** 9 * @time: 下午7:59:23 10 * @date: 2017年4月29日 11 * @auther: skyfffire 12 * @version: v0.1 13 */ 14 public class Mak

gcc 生成动态链接库

http://blog.csdn.net/ngvjai/article/details/8520840 Linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 .so 为共享库,是shared object,用于动态连接的,和dll差不多 .a为静态库,是好多个.o合在一起,用于静态连接 .la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息.可以用如下命令查看*.la文件的格式   $file *.la    

入职一个月考核学习

  1.目录命令的学习 1.1.ifconfig ifconfig  // 查看网卡等 信息 ifconfig eth0 + IP  // 设置网卡 IP ifconfig eth0 down/up 网卡开关 1.2.mount/umount    实现 nfs 网络文件系统的挂载,一般的格式是: mount –t type –o optlist  dev dir -t : 指定挂接文件系统的类型,比如 nfs -o: 指定挂接可选的命令,当多个的命令的时候,还是使用一个 -o,但是命令之间使用

RASPBERRY PI 外设学习资源

参考: http://www.siongboon.com/projects/2013-07-08_raspberry_pi/index.html Raspberry Pi         Get started with Raspberry Pi (RPi), a step by step approach to get your Raspberry Pi with low level electronics hardware control. Make simple, step by step

&quot;GCC + C&quot; 语言入门首选推荐套餐-WangBook.com开篇

想到哪里写到哪里. 这里想分享的内容如下: 1.如果想在程序方便做一些独到的事情,C语言是入门语言的首选.当然现在也有大侠指出当前Swift也是一个更清新.自然的选择.但如果您之后想要对算法和汇编等深入学习,或者接触Objective-C还是建议您用C作为入门首选. 2.C语言真的很“没用”.作为一个初入江湖的小弟,不可能拿着它直接开辟出一片新天地,因为当下受开发工具和客户需求的制约,当下开发很多更贴合实际需求的应用时,C往往不是首选,因为有更实用的语言工具可选,但如果你对C有了一定的基础,相信

GCC参数详解

[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件 4.连接目标代码,生成可执行程序 [参数详解] -x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp. 可以使用的参数有下面的这些:

gcc编译的四个阶段:预处理,编译,汇编,链接

1:gcc编译的四个阶段:预处理,编译,汇编,链接 #vi file.c #gcc -E file.c -o file.i//-E查看且预处理后停止编译,-o生成目标文件,-i表示已预处理 #gcc -S file.i -o file.s//-S编译到汇编而不进行汇编和链接 #gcc -c file.s -o file.o//-c编译到目标代码 #gcc file.o -o file//-o 文件输出到文件 # gcc -static file.c -o file//-static禁止使用动态库

GCC笔记

The History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnu's Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一款可移植.可优化.支持ANSI C的开源C编译器.GCC最初的全名是GNU C Compiler,之后,随着GCC支持的语言越来越多,它的名称变成了GNU Compiler Collection.这里介绍的gcc是GCC的前端,C编译器. 警告信息     -Wall : 显示所有常用的编译警告信息.