GCC编译选项

转载 2013年12月03日 16:30:01

GCC编译选项


From:  http://yulinlu.blog.163.com/blog/static/588156982010724180248/

gcc/g++在执行编译工作的时候,总共需要4步
1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]
参数详解
-c 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件   
eg: gcc -c hello.c 生成.o的obj文件
-o 制定目标名称,缺省的时候,gcc 编译出来的文件是a.out
eg:gcc -o hello.exe hello.c 
gcc -o hello.asm -S hello.c
–D 允许从编译程序命令行定义宏符号
一共有两种情况:一种是用-DMACRO,相当于在程序中使用#define MACRO,另一种是用-DMACRO=A,相当于程序中的#define MACRO A.
eg:如对下面这段代码:
#ifdefine DEBUG
printf("debug message\n");
#endif
编译时可加上-DDEBUG参数,执行程序则打印出编译信息
-Umacro   相当于C语言中的#undef macro
-undef   取消对任何非标准宏的定义
-g
指明编译程序在编译的输出中应产生调试信息.这个调试信息使源代码和变量名引用在调试程序中或者当程序异常退出后在分析core文件时可被使用.
-gstabs   此选项以stabs格式声称调试信息,但是不包括gdb调试信息.   
-gstabs+  此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息. -ggdb    此选项将尽可能的生成gdb的可以使用的调试信息.
-Wall 以最高级别使用GNU编译程序,专门用于显示警告用!!
eg:gcc -Wall hello.c
-I dir   
在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如 果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找. 对于#include,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺 省的头文件目录查找
eg:gcc -c -I/usr/local/include -I/opt/include hello.c 此时目录搜索会按给出的次序进行.
-I-  就是取消前一个参数的功能,所以一般在-Idir之后使用
-idirafter dir   在-I的目录里面查找失败,到这个目录里面查找
-iprefix prefix -iwithprefix dir
一般一起使用,当-I的目录查找失败,会到prefix+dir下查找
-nostdinc
使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置
-nostdin C++
规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg++库使用
-S 只激活预处理和编译,就是指把文件编译成为汇编代码。   
eg:gcc -S hello.c 生成.s的汇编代码,你可以用文本编辑器查看
-E
只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面. 这个选项是相对标准的,它允许修改命令行以使编译程序把预先处理的C文件发到标准输出,而不实际编译代码.在查看C预处理伪指令和C宏时,这是很有用的.可能的编译输出可重新定向到一个文件,然后用编辑程序来分析:
eg: gcc -c -E hello.c >cpp.out
此命令使include文件和程序被预先处理并重定向到文件cpp.out.以后可以用编辑程序或者分页命令分析这个文件,并确定最终的C语言代码看起来如何.
gcc -E hello.c > pianoapan.txt   
gcc -E hello.c | more 可以用来去掉文件中的注释
-pipe 使用管道代替编译中临时文件,在使用非GNU汇编工具的时候,可能有些问题
eg:gcc -pipe -o hello.exe hello.c
-C
在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的
-M
生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c 来测试一下,很简单。
-MM 和上面的那个一样,但是它将忽略由#include造成的依赖关系。   
-MD   和-M相同,但是输出将导入到.d的文件里面   
-MMD 和-MM相同,但是输出将导入到.d的文件里面   
-Wa,option  
此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然 后传递给会汇编程序   
-Wl.option
此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然 后传递给会连接程序.   
-Ldir指定连接库的搜索目录,制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。
-llibrary指定连接库的名字

 


Gcc常用操作(编译选项与链接等)

本文转载于:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html 1简介 GCC 的意思也只...
  • yaked
  • yaked
  • 2015年04月20日 14:37
  • 3536

透过源码领悟GCC到底在干些什么

GCC源码分析(一)——介绍与安装 GCC源码分析(一)——介绍与安装 目录(?)[-] 一GCC...
  • u010425725
  • u010425725
  • 2014年11月01日 23:30
  • 708

详解Linux安装GCC方法(下载、解压缩、安装、卸载)

http://blog.sina.com.cn/s/blog_7f84825b0101le49.html 详细安装的话,看安装好之后,怎么样同时使用两个版本的GCC G++等 ----------...
  • kakaxi2222
  • kakaxi2222
  • 2015年06月24日 14:02
  • 2355

源码安装gcc步骤

准备工作 下载并解压gcc源码包 从http://ftp.gnu.org/gnu/gcc 下载一个你想要编译的gcc源码包。 比如下载的是gcc-4.7.2.tar.bz2,然后用输入解压命令 t...
  • wangqing_12345
  • wangqing_12345
  • 2016年09月09日 10:23
  • 5700

GCC与LLVM见解

首先的说GCC(GNU Compiler Collection,GNU编译器集合)是一个优秀的编译器 ,但是它跟IDE之间的互操作性不够好,编译器分为编译器前端和编译器后端,前端主要负责展开预处理器宏...
  • u013770512
  • u013770512
  • 2014年03月20日 23:36
  • 835

Linux 下 gcc 与 g++的差别

参考网易博客者“静心”的博客——《gcc与g++的区别》结合自己的认识做出的个人领悟。(由于个人水平有限,难免会存在错误的地方,请见谅) 一般而言,在Linux下编译程序分为以下4个阶段: 预处理...
  • GMPY_Tiger
  • GMPY_Tiger
  • 2015年08月20日 15:06
  • 2781

gcc 使用入门教程

如果你还没装编译环境或自己不确定装没装,不妨先执行 sudo apt-get install build-essential 如果你需要编译 Fortran 程序,那么还需要安装 gfortran...
  • yc461515457
  • yc461515457
  • 2016年03月16日 18:35
  • 9390

gcc 源码分析-前端篇1

前年写了 gcc源码分析,感觉写的不好,如果没有源代码读起来很痛苦,基本上是读天书,这一次改了一种写法,用另一种思路来写,希望这一次能好一点: 1.基本数据结构 编译器前端主要的任务就是把输入的源...
  • sstower
  • sstower
  • 2015年08月07日 15:10
  • 1262

linux 编译安装GCC4.9.3(完整版)

第一步 首先下载gcc源码包 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.3/gcc-4.9.3.tar.bz2第...
  • xiexievv
  • xiexievv
  • 2016年02月01日 19:05
  • 13060

gcc 的ar命令

库文件操作命令:ar ----非常好的东东。。让你能查看函数库里的详细情况和用多个对象文件生成一个库文件。   ar -t libname.a //显示所有对象文件(.o文件)的列表.例...
  • mfcbest
  • mfcbest
  • 2014年06月19日 11:19
  • 1390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GCC编译选项
举报原因:
原因补充:

(最多只允许输入30个字)