[转] Linux中gcc,g++常用编译选项

http://blog.sina.com.cn/s/blog_5ff2a8a201011ro8.html

gcc/g++ 在执行编译时,需要4步

  1.预处理,生成.i的文件[使用-E参数]

  2.将预处理后的文件不转换成汇编语言,生成文件.s[使用-S参数]

  3.有汇编变为目标代码(机器代码)生成.o的文件[使用-c参数]

  4.连接目标代码,生成可执行程序[使用-o参数]

-x language filename
 
设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定,C语言的后缀名称是.c的,而C++的后缀名是.C或.cpp,如果你非常个性,决定你的C代码文件的后缀名是.pig
哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。能使用的参数有下面的这些:
  `c’, `objective-c’, `c-header’, `c++’, `cpp-output’, `assembler’,
and `a
ssembler-with-cpp’.
  看到英文,应该能理解的。

  例子用法: cd..
  gcc -x c hello.pig
-x none filename
  关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型
  例子用法:
  gcc -x c hello.pig -x none hello2.c
  
-c
  只激活预处理,编译,和汇编,也就是他只把程式做成obj文件
  例子用法:
  gcc -c hello.c
  他将生成.o的obj文件
-S
  只激活预处理和编译,就是指把文件编译成为汇编代码。
  例子用法
  gcc -S hello.c
  他将生成.s的汇编代码,你能用文本编辑器察看
-E
  只激活预处理,这个不生成文件,你需要把他重定向到一个输出文件里面.
  例子用法:
  gcc -E hello.c > pianoapan.txt
  gcc -E hello.c | more
  慢慢看吧,一个hello word 也要预处理成800行的代码
-o
  制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,非常难听,如果你和我有同感,改掉他,哈哈
  例子用法
  gcc -o hello.exe hello.c (哦,windows用习惯了)
  gcc -o hello.asm -S hello.c
-pipe
  使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题
  gcc -pipe -o hello.exe hello.c
-ansi
  关闭gnu c中和ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline
typeof关键字,及UNIX,vax等预处理宏
  
-include file
  包含某个代码,简单来说,就是便于某个文件需要另一个文件的时候,就能用他设
定,功能就相当于在代码中使用#i nclude
  例子用法:
  gcc hello.c -include /root/pianopan.h
  
-imacros file
  将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出目前输入文件中
  
-Dmacro
  相当于C语言中的#define macro
  
-Dmacro=defn
  相当于C语言中的#define macro=defn
  
-Umacro
  相当于C语言中的#undef macro
-undef
  取消对所有非标准宏的定义
  
-Idir
  在你是用#i nclude"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如
果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他
  回先在你所制定的目录查找,然后再按常规的顺序去找.
  对于#i nclude,gcc/g++会到-I制定的目录查找,查未找到,然后将到系统的缺
省的头文件目录查找
  
-I-
  就是取消前一个参数的功能,所以一般在-Idir之后使用
  
-idirafter dir
  在-I的目录里面查找失败,讲到这个目录里面查找.
  
-iprefix prefix
-iwithprefix dir
  一般一起使用,当-I的目录查找失败,会到prefix+dir下查找
  
-nostdinc
  使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头
文件的位置
  
-nostdin C++
  规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg++库
使用
  
-C
  在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程式,用这个非常方便的
-M
  生成文件关联的信息。包含目标文件所依赖的所有原始码你能用gcc -M hello.c
来测试一下,非常简单。
  
-MM
  和上面的那个相同,不过他将忽略由#i nclude造成的依赖关系。
  
-MD
  和-M相同,不过输出将导入到.d的文件里面
  
-MMD
  和-MM相同,不过输出将导入到.d的文件里面
  
-Wa,option
  此选项传递option给汇编程式;如果option中间有逗号,就将option分成多个选项,然
后传递给会汇编程式
  
-Wl.option
  此选项传递option给连接程式;如果option中间有逗号,就将option分成多个选项,然
后传递给会连接程式.
  
-llibrary
  制定编译的时候使用的库
  例子用法
  gcc -lcurses hello.c
  使用ncurses库编译程式
  
-Ldir
  制定编译的时候,搜索库的路径。比如你自己的库,能用他制定目录,不然
  编译器将只在标准库的目录找。这个dir就是目录的名称。
  
-O0
-O1
-O2
-O3
  编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 
    
-g
  只是编译器,在编译的时候,产生调试信息。
  
-gstabs
  此选项以stabs格式声称调试信息,不过不包括gdb调试信息.
  
-gstabs+
  此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.
  
-ggdb
  此选项将尽可能的生成gdb的能使用的调试信息.
-static
  此选项将禁止使用动态库,所以,编译出来的东西,一般都非常大,也不必什么
动态连接库,就能运行.
-shared
  此选项将尽量使用动态库,所以生成文件比较小,不过需要系统由动态库.
-traditional
  试图让编译器支持传统的C语言特性
-Wall
   
显示所有警告信息(warning all)

时间: 2024-10-12 17:57:29

[转] Linux中gcc,g++常用编译选项的相关文章

Linux中gcc编译器的用法

在Linux环境下进行开发,gcc是非常重要的编译工具,所以学习gcc的基本常见用法时非常有必要的. 一.首先我们先说明下gcc编译源文件的后缀名类型 .c为后缀的文件,C语言源代码文件:  .a为后缀的文件,是由目标文件构成的档案库文件:  .C,.cc或.cxx 为后缀的文件,是C++源代码文件:  .h为后缀的文件,是程序所包含的头文件:  .i 为后缀的文件,是已经预处理过的C源代码文件:  .ii为后缀的文件,是已经预处理过的C++源代码文件:  .m为后缀的文件,是Objective

[转帖]「日常小记」linux中强大且常用命令:find、grep

「日常小记」linux中强大且常用命令:find.grep https://zhuanlan.zhihu.com/p/74379265 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1.

[Linux]在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢

在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢? Ctrl+c 结束正在运行的程序 Ctrl+d 结束输入或退出shell Ctrl+s 暂停屏幕输出[锁住终端] Ctrl+q 恢复屏幕输出[解锁终端] Ctrl+l 清屏,[是字母L的小写]等同于Clear Ctrl+a 切换到命令行开始 Ctrl+e 切换到命令行末尾 Ctrl+u 清除剪切光标之前的内容 Ctrl+k 清除剪切光标及光标之后的内容Ctrl+y 在光标处粘贴剪切的内容Ctrl+r 查找历史命令[输入关键字

gcc/g++ 常用参数

编译的步骤 参考:gcc参数详解 gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp]. 对应的参数是 -E 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs].对应的参数是 -S 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as].对应的参数是 -c 4.连接目标代码,生成可执行程序[链接器ld].无参数. 编译步骤举例 有三个文件f1.h.f1.cc.test.c

Linux gcc/g++下GDB调试及其调试脚本的使用

GDB调试及其调试脚本的使用返回脚本百事通一.GDB调试 1.1. GDB 概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX/Linux平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2.可让

gcc/g++常用命令

1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码. 3. gcc -c source_file.c-c,只执行到编译,输出目标文件. 4. gcc (-E/S/c/) source_file.c -o output_filename-o, 指定输出文件名,可以配合以上三种标签使用.-o 参数可以被省略.这种情况下编译器将使用以下默认名称输出:-E:预编译结果

Linux中gcc和g++

今天在Linux上编写一个小的C++程序运行,需要用到iostream中cout,一开始创建一个hello.c的文件编写如下代码: 1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<unistd.h> 4 #include<iostream> 5 using namespace std; 6 int main() 7 { 8 int i; 9 for(i=0;i<3;i++) 10 { 11

Linux中vi编辑器常用命令

游标控制 h 游标向左移 j 游标向下移 k 游标向上移 l (or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当前句子的首部 ) 移到下一个句子的首部 { 移到当前段的首部 } 移到下一段的首部 [[ 移到当前区段的首部 ]] 移到下一个区段的首部 0 移到当前行的首部 $ 移到当前行的尾部 ^ 移到当前行第一个非空白字符的地方 + or RETURN 移动到下一行的第一个字符 - 移动到上一行的第一个字符

Linux中git的常用命令

1.安装依赖包 sudo yum install curl-devel expat-devel gettext-developenssl-devel zlib-devel sudo yum install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev 2.安装git yum -y install git 3.创建项目目录 mkdir gitbase cd gitbase 4.创建共享库 sudo git init 5.