gcc编译器使用帮助

上一篇 / 下一篇  2008-12-10 22:43:14 / 个人分类:GCC编译器

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
gcc   and   g++分别是gnu的c   &   c++编译器    
)Om%ZFS]`0   51Testing软件测试网y4_d8m%x
  gcc/g++在执行编译工作的时候,总共需要4步    
#YTnc&jcHn0   51Testing软件测试网!Ox N"l'dC K-]%n6b[2Z
  1.预处理,生成.i的文件    
M\@-a*X0  2.将预处理后的文件不转换成汇编语言,生成文件.s    
s1r$?-II2S:X8i0  3.有汇编变为目标代码(机器代码)生成.o的文件    
#lX5D)]+M:cfu{0  4.连接目标代码,生成可执行程序    51Testing软件测试网g:U Ro2_c
   
0_8X'tapw0   
2x7l Lm[d[z0  [参数详解]    51Testing软件测试网+yaDF&\ B XLw
  -x   language   filename      
I6f*\%pG|0       设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根    51Testing软件测试网][D^+Hy
       据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果    
R8@{n/D+y;L0       你很个性,决定你的C代码文件的后缀名是.pig   哈哈,那你就要用这    
2a#l2{"D(bv ]0       个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数    
9SZ8c6]%K4U0       的使用。    
iM1l0A.p,ho(@0       可以使用的参数吗有下面的这些    51Testing软件测试网b3@I9vq;a/tl+t | j
         `c',   `objective-c',   `c-header',   `c++',   `cpp-output',      51Testing软件测试网bR9W-sqq6IXl
         `assembler',   and   `assembler-with-cpp'.    
{nx bk4W&r*z.LK5X0       看到英文,应该可以理解的。    51Testing软件测试网%M3@%i:R4^g:j0?q0V
       例子用法:    51Testing软件测试网2S&lj4s8n7^|T
       gcc   -x   c   hello.pig    51Testing软件测试网6O F0[L3BUu O
        
6@%Iq(R ~$_cx0  -x   none   filename    51Testing软件测试网&pP Spwc1k"A!m7`
    关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型    
xP"Uq'\9[N0    例子用法:    51Testing软件测试网3} G;UC9MnB
    gcc   -x   c   hello.pig   -x   none   hello2.c    51Testing软件测试网%T*^U'y9\2W"v;e x
        
Jq%_W:LEx4S0  -c      51Testing软件测试网/e$nw~{ K
    只激活预处理,编译,和汇编,也就是他只把程序做成obj文件    
IO%{Wp2u0    例子用法:    
O/By}4l5mb0    gcc   -c   hello.c    
G:uI0].FM6S2_4~!b0    他将生成.o的obj文件      51Testing软件测试网 \egm"\/\
   
X"A?l{M M2R0  -S    51Testing软件测试网 @m'?f^ L
    只激活预处理和编译,就是指把文件编译成为汇编代码。    51Testing软件测试网V$C.o6h Zs@
    例子用法    51Testing软件测试网 V2O DA(p*L GhY*DG
    gcc   -S   hello.c    51Testing软件测试网-wk W)g&}4p,U&[5W:W`
    他将生成.s的汇编代码,你可以用文本编辑器察看    
{$JF%tWMV0   
S)fh!E+_y{:na7{0  -E    51Testing软件测试网#\R(C4D's8tST'C G
    只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里    
^U8O,B(\0M0    面.    
6F.Q-Wkh`N0    例子用法:    
l/lYw0l}5c^"] ug0    gcc   -E   hello.c   >   pianoapan.txt    51Testing软件测试网LCn#UPF
    gcc   -E   hello.c   |   more    
'~'g"nV IcB\t0    慢慢看吧,一个hello   word   也要与处理成800行的代码    51Testing软件测试网"R/r4rL-\%\"D7k6rc
   51Testing软件测试网-RzN`F UO(E}
  -o    51Testing软件测试网W%Dvw!s EF
    制定目标名称,缺省的时候,gcc   编译出来的文件是a.out,很难听,如果    
"z3KYpsHq0    你和我有同感,改掉它,哈哈    
4K%S1l M^0    例子用法    51Testing软件测试网d1J`3gO#b)k.c,a
    gcc   -o   hello.exe   hello.c   (哦,windows用习惯了)    
6[.RR%v&Q3V)Q?0    gcc   -o   hello.asm   -S   hello.c    51Testing软件测试网;`.X;y7h2XJh
   51Testing软件测试网mLWP N^
  -pipe    51Testing软件测试网6}Z1gS;AUcEA
    使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问    51Testing软件测试网@H_!S]f y$[
    题    51Testing软件测试网X [,HI6W
    gcc   -pipe   -o   hello.exe   hello.c    
a2C*D-zQ0   
.f"J)@&m:bs/O0  -ansi    51Testing软件测试网+mwAII&s2d-w
    关闭gnu   c中与ansi   c不兼容的特性,激活ansi   c的专有特性(包括禁止一    
Gg?XF+DV0d0    些asm   inline   typeof关键字,以及UNIX,vax等预处理宏,    51Testing软件测试网 {^6A Z5\"M"ah
   
yG-q n![AX8y.K1D8lP0  -fno-asm    51Testing软件测试网qD3sI8fb!J
    此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作    
}{)v#pc*f,FE0    关键字。    
M8c5n NtD0          
9Lt%{)a U`Zh;R0  -fno-strict-prototype    
8a'L r#PI0    只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式    
Tw#e Am6Q$[0    的对参数的个数和类型说明,而不是没有参数.    
#O!x&n"Fcw0?k0    而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说    
!jd f;LK0    明的类型    
jRUp&i;Qd O}:a0        51Testing软件测试网7Zp%CH n `a1F
  -fthis-is-varialble    51Testing软件测试网P%aXao `
    就是向传统c++看齐,可以使用this当一般变量使用.    
[1ti"enMa-H0        
w6Q,_8`.s;E6R'[9L+Iv0  -fcond-mismatch    
hW9j&F*Q.~1x2JFA8j0    允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型    51Testing软件测试网Guug:B!Q'T
        51Testing软件测试网5R,k e+S.T8j4yB
  -funsigned-char    51Testing软件测试网 { O2hVjrc
  -fno-signed-char    
|l U8y5d)s`SS0  -fsigned-char    
ti%iT+DJeT0  -fno-unsigned-char    51Testing软件测试网_/v hc*@(N7wR
    这四个参数是对char类型进行设置,决定将char类型设置成unsigned   char(前    
:_wEEbEM+y$p0    两个参数)或者   signed   char(后两个参数)    
ODd%Z yb5e0        
C }5O"L+VZ,O M{0  -include   file    
LPmGt0    包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以    51Testing软件测试网)H-T6D#H G1m'z5\s
    用它设定,功能就相当于在代码中使用#include<filename>    51Testing软件测试网1C%Z| iH9GP{S%`u
    例子用法:    51Testing软件测试网sj{&J9Lr_%PH,Y
    gcc   hello.c   -include   /root/pianopan.h    51Testing软件测试网(V9x(@ a,\6~1XL.}3ku6f
        51Testing软件测试网N/uxa2NM
  -imacros   file    
[.wG;F7icw$R0    将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件    
/X`.|%XkD-wL4`WxNM'o0    中    51Testing软件测试网&R8Sl3L{ e,]%h
        51Testing软件测试网b/Dqy|3oM
  -Dmacro    
4f2PX[xb0    相当于C语言中的#define   macro    
,Nu$x9VBc)a0        51Testing软件测试网 F m$g2d"?}i9[/}0B
  -Dmacro=defn    
f5W'zz'A0    相当于C语言中的#define   macro=defn    
F*Ldb:\2Wb F,u'G&w'~0        
4tMO7j!G l{0  -Umacro    
HGY*d$ZN#wj3hU0    相当于C语言中的#undef   macro    
e!PA1I0g QQX0   
j0KX1@k5w.b~0  -undef    
Dz(] ju]%zi-ko5b0    取消对任何非标准宏的定义    
D0b1IQ5R kq%q1S"o0        
F Zw ` {gf(V0  -Idir    51Testing软件测试网B)ECM,G1r1PO2r
    在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头    
Ev^rq-G%`]*O0    文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他    
:G cX%j+i3?Y"wBD0    回先在你所制定的目录查找,然后再按常规的顺序去找.    51Testing软件测试网9Z+WGIJ"H
    对于#include<file>,gcc/g++会到-I制定的目录查找,查找不到,然后将到系    
+@V3{$S,J8j*O%Z w0    统的缺省的头文件目录查找    
3C X;B&^|&@2V0        
PtBzo3O0g#g A0  -I-    
B6TzM*oN| e[0    就是取消前一个参数的功能,所以一般在-Idir之后使用    51Testing软件测试网CZM!fNd2^Q*Z[*|%Q8X
        
3v&F#L:z ^0  -idirafter   dir    
hg4X Iq(t]0    在-I的目录里面查找失败,讲到这个目录里面查找.    51Testing软件测试网m"M^6Jn'j*h
        51Testing软件测试网I,[ |'vW2U,E
  -iprefix   prefix    
3z6v*G#j.|0  -iwithprefix   dir    51Testing软件测试网/^x3Vu5mx
    一般一起使用,当-I的目录查找失败,会到prefix+dir下查找    51Testing软件测试网!BD&P;OG5{NM
        
b#@1h\*gG0  -nostdinc    51Testing软件测试网/Y b0aRT#Hn
    使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确    
INEdS?.{aU0    限定头文件的位置    51Testing软件测试网Elcl9n&t/V}H%r
        
cm0lG,l0  -nostdin   C++    51Testing软件测试网Wv}5I;Jzk
    规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建    51Testing软件测试网b7f-B6^A)X
    libg++库使用    
+W2YI7]$U V0        
5U/K&sM5G6f0  -C    
P)@%qS-x1o0    在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很    51Testing软件测试网p4ap[^U Q
    方便的    
X:sS'M)sQ9M2f0        
,]U:r!f q0  -M    
&g4\.t{6?m?+}0    生成文件关联的信息。包含目标文件所依赖的所有源代码    
|nU5A"sCP0    你可以用gcc   -M   hello.c来测试一下,很简单。    51Testing软件测试网lLqx+[5bH
        
3`4k/}Bj}0  -MM    
PKu@%M.Z0    和上面的那个一样,但是它将忽略由#include<file>造成的依赖关系。    51Testing软件测试网,|vBDLS0R"@
        51Testing软件测试网 Y!O9rv?Tg;C
  -MD    
9z[G v'x |d_ Ci0    和-M相同,但是输出将导入到.d的文件里面    
:?S8^q-[&L ]:S0        51Testing软件测试网+g.n5Dj]4t/_8JL
  -MMD    
N&~#s*wm-|-g;{0    和-MM相同,但是输出将导入到.d的文件里面    51Testing软件测试网H&{$@MP
        
p!\ \,la T9m*w;s0av0  -Wa,option    51Testing软件测试网XEK8O fD'K
    此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选    
t&Y5_"qe)i&T!Y p-F0    项,然后传递给会汇编程序    
3w)pp:g5G`0        51Testing软件测试网6N"UL&b_}%KEKWD
  -Wl.option    
2z |(k@km0    此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选    
"NU*AG)Q}3h0    项,然后传递给会连接程序.    
1KM2hC3k1x0        51Testing软件测试网5s%tx7s!ru
   
&`^`1Ru]3P0  -llibrary      
(h$GyD Y*|;o y\ p$Ph,G0    制定编译的时候使用的库    
@gv#hDVu!r'qA0    例子用法    
-cm2] ]VBb]0    gcc   -lcurses   hello.c    51Testing软件测试网Zs-Z_,J7hsB
    使用ncurses库编译程序    51Testing软件测试网 xFQ7J2U*Z-k*W T
        
8B9fh-V$}9Nq#c'[0  -Ldir    51Testing软件测试网k^tCK I(l
    制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然    
Q y6bdqp$_0    编译器将只在标准库的目录找。这个dir就是目录的名称。    
^r]mz IQH M a ?0        
qJ1`3C P8y'A0  -O0    
6Pgp5~$O v1I0  -O1    
9hh%zg el;@0  -O2    51Testing软件测试网6D[Ua2H1p@
  -O3    51Testing软件测试网;b+D#Ev)k+\
    编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最    
!_Gr{/Y5Lv$jq0    高      51Testing软件测试网4sS+S2gt!i&N
        51Testing软件测试网6j'Y%~@8Dht [
  -g    51Testing软件测试网/D'l%IH!d ^sN5U
    只是编译器,在编译的时候,产生条是信息。    
%Fa4y*K,Q j%@ ~b-uG0        
_"O#`2~4^RR"zA0  -gstabs    51Testing软件测试网 ZS8M3h%{z^0t W
    此选项以stabs格式声称调试信息,但是不包括gdb调试信息.    
q'V2}D9Oy5P;x0        
^ Y n%L l0  -gstabs+    
\.[ j'~F D-M2C0    此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.    51Testing软件测试网I#u|S|[
        
9Xth-s0qLp0  -ggdb    51Testing软件测试网2HD2?Wsp+]*k(z^
    此选项将尽可能的生成gdb的可以使用的调试信息.  
相关阅读:

TAG: GCC编译器

 

评分:0

我来说两句

Open Toolbar