gcc使用整理(1)

来源:互联网 发布:前锦网络2018校园招聘 编辑:程序博客网 时间:2024/06/06 19:10
 

     GCC是一个用于linux系统下编程的编译器。GCC(GNU Compiler Collection)是一套由GNU开发的编程语言编译器。

    GCC所遵循的部分约定规则:.c C语言源代码文件;.a 由目标文件构成的档案库文件;.C、.cc、.cxx C++源代码文件;.h 头文件;.i 已经预处理过的C源代码文件;.ii 已经预处理过的C++源代码文件;.m Obj-C源代码文件;.o 编译后的目标文件;.s 汇编语言源代码文件;.S 经过预编译的汇编语言源代码文件。

    基本用法:-c 只编译,不连接为可执行文件;-o output_filename 确定输出文件的名称为output_filename。如果不给出这个选项,GCC就给出预设的可执行文件a.out;-g 产生符号调试工具所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项;-On 对程序进行优化编译、连接;-ldirname 将dirname所指出的目录加入到程序头文件目录列表中。

参数详解:

-x language filename

    设定文件所使用的语言,使后缀名无效,对以后多个有效。例子:gcc -x c hello.pig。

-x none filename

    关掉上一个选项。例子:gcc -x c hello.pig -x none hello2.c

-c

    只激活预处理、编译和汇编,也就是只把程序做成obj文件。例子:gcc -c hello.c 将生成.o的文件。

-S

    只激活预处理和编译,就是把文件编译成汇编代码。例子:gcc -S hello.c 将生成.s的汇编代码。

-E

    只激活预处理,这个不生成文件,需要把它重定向到一个输出文件里面。例子:gcc -E hello.c > pianoapan.txt

-o

    制定目标名称。

例子:gcc -o hello.exe hello.c
           gcc -o hello.asm -S hello.c

-pipe

    使用管道代替编译中的临时文件。

例子:gcc -pipe -o hello.exe hello.c

-ansi

    关闭GNU C中与ANSI C不兼容的特性。

-include file

    包含某个代码,相当于#include <filename>

例子:gcc hello.c -include /root/pianopan.h

-imacros file

    将file文件中的宏,扩展到gcc的输入文件。

-Dmacro

    相当于C语言中的#define macro。

-Dmacro=defn

    相当于C语言中的#define macro=defn。

-Umacro

    相当于C语言中的#undef macro。

-undef

    取消对任何非标准宏的定义。

-Idir

    在你是用#include "file"的时候,gcc会先在当前目录查找你所制定的头文件,如果没有找到,它会回到缺省的头文件目录中找。如果使用-I制定了目录,它会先在你所制定的目录中查找,然后再按常规的顺序去找。

-idirafter dir

    在-I的目录中查找失败,将到这个目录里面查找。

-iprefix prefix

-iwithprefix dir

    一般一起使用,当-I的目录查找失败,会到prefix+dir下查找。

-nostdinc

    使编译器不再系统缺省的头文件目录里面找,一般和-I联合使用,明确限定头文件的位置。

-C

    在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的。

-M

    生成文件关联信息。包含目标文件所依赖的所有源代码可以用gcc -M hello.c来测试一下。

-MM

    和上面的那个一样,但是它将忽略由#include <file>造成的依赖关系。

-MMD

    和-MM相同,但是输出导入到.d文件里面。

-Wa,option

    此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给汇编程序。

-Wl.option

    此选项传递option给连接程序。

-llibrary

    制定编译的时候使用的库。

例子:gcc -lcurses hello.c 使用ncurses库编译程序。

-Ldir

    制定编译的时候,搜索库的路径。不然,编译器只在标准库的目录找。

-On

    编译器优化选项的4个级别。

-g

    只是编译器在编译的时候,产生调试信息。

-ggdb

    此选项将尽可能的生产gdb的可以使用的调试信息。

-static

    此选项将禁止使用动态库。所以,编译出来的东西,一般都很大,不需要什么动态链接库就可以运行。

-share

    此选项将尽可能使用动态库,所以生成的文件比较小,但是需要动态库。