GCC 编译选项

来源:互联网 发布:汇通易贷 知乎 编辑:程序博客网 时间:2024/05/01 02:22

                                                                            gcc选项

总体选项 (Overall Option)  
           (C++编译的步骤: 预处理 -> 编译 -> 汇编 -> 连接)                   
           -c(生成.obj )      进行 预处理-编译-汇编,输出生产obj机器代码文件
           -S(生成汇编)       进行 预处理-编译,输出汇编代码
           -E(预处理)         只预处理,不生成文件,但可以重定向到指定文件。
                                                 如: gcc -E hello.c > My.txt   
                
           -o file                   生成指定的文件
           -pipe
           -v                         显示在编译过程的每一步中用到的命令
           -x language      设定文件所使用的语言,默认后缀名 `c'。其它可选如下:
                              'objective-c', 'c-header', 'c++', 'cpp-output',
                                                 'assembler', ' assembler-with-cpp' 等
                   
语言选项 (LANGUAGE OPTIONS) 
           -ansi        只支持 ANSI 标准的 C 语法.这一选项将禁止 GNU C 的某些特色 。
                                     如 asm 或 typeof 关键词.

           -frtti         开启RTTI的支持(dynamic_cast和typeid需要用到),和vc++不同,
                                     这在gcc中是默认选项。使用"-fno-rtti"将其禁用。

           -lstdc++ 开启对C++特性支持的编译,如new,delete 等或者直接使用 g++。 

预处理器选项 (Preprocessor Option) 
            -Aassertion 
            -dD
            -dM
            -dN  
            -E                            只激活预处理,但不生成文件,可以重定向到指定文件。
            -C                            一般和-E使用, 在预处理的时候,不删除注释信息,分析程序很方便。
            -H                            头文件依赖。
            -idirafter   dir 
            -include   file            相当于在代码中使用#include<filename>。
            -imacros  file
            -iprefix     file
            -iwithprefix dir
            -M -MD
            -MM                          输出一个make兼容的相关列表
            -MMD -nostdinc 
            -P 
            -Dmacro[=defn]       相当于C语言中的#def        macro defn    //缺省默认为 1
            -Umacro                   相当于C语言中的#undef   macro
                       
汇编器选项 (ASSEMBLER OPTION)    
           -Wa,option 

连接器选项 (LINKER OPTION)    
           -llibrary                  指定依赖的库名
                    -nostartfiles
           -nostdlib
           -static                    使用静态库编译 
           -shared                  使用动态库编译 
           -symbolic
           -Xlinker option
           -Wl,option
           -u symbol

 

目录选项 (DIRECTORY OPTION)       
           -Bprefix
           -Idir -I-  (大写的i)    指定所需头文件目录<include dir> ,
           -Ldir                         指定所需库文件目录<lib           dir>

 

警告选项 (WARNING OPTION)   
          -w              不生成警告信息
          -Wall          生成所有警告信息 ,也可以用-W(warning)来标记指定的警告
          -Werror      把所有的警告都视为错误处理

 

调试选项 (DEBUGGING OPTION)   
             -a -dletters -fpretend-float 
             -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ 
                          指示编译器,在编译时产生调试信息
             -ggdb -p -pg -save-temps -print-file-name=library -print-libgcc-file-name -print-prog-name=program
                          比-g生成更多的信息,


优化选项 (OPTIMIZATION OPTION)     :
             -O0不进行优化处理,-O或-O1优化生成代码 -O2进一步优化 -O3比-O2更进一步优化,包括inline函数)

 

目标机选项 (TARGET OPTION) 
             -b machine
             -V version

 

机器相关选项 (MACHINE DEPENDENT OPTION)
             -m486  针对 486 进行代码优化

 

代码生成选项 (CODE GENERATION OPTION)  
             -fpic -fPIC

====================================================================

在编译的时候我们需要用到其他的库,在config时候可以通过“-I”来指定头文件目录,
但是每次都需要设置的话难免有些麻烦,找到一个简单的方法。看下文部分。

有大量的环境变量可供设置以影响 GCC 编译程序的方式。利用这些变量的控制也可使用合适的命令行选项。
一些环境变量设置在目录名列表中。这些名字和 PATH 环境变量使用的格式相同。
特殊字符 PATH_SEPARATOR (安装编译程序的时候定义)用在目录名之间。
在 UNIX 系统中,分隔符是冒号,而 Windows 系统中为分号。

C_INCLUDE_PATH
编译 C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,
就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。
也见 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

COMPILER_PATH
该环境变量指定一个或多个目录名列表,如果没有指定 GCC_EXEC_PREFIX 定位子程序,
编译程序会在此查找它的子程序。也见 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行选项。
CPATH 编译 C 、 C++ 和 Objective-C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,
查找头文件,就好像在命令行中指定 -l 选项一样。会首先查找 -l 指定的所有目录。
也见 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

CPLUS_INCLUDE_PATH
编译 C++ 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,
就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。
也见 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

DEPENDENCIES_OUTPUT
为文件名设置该环境变量会让预处理程序将基于依赖关系的 makefile 规则写入文件。不会包括系统头文件名字。
如果环境变量设置为单名,被看作是文件名字,而依赖关系规则的名字来自源文件名字。
如果定义中有两个名字,则第二个名字是用作依赖关系规则的目标名。
设置该环境变量的结果和使用命令行选项 -MM 、 -MF 和 -MT 的组合是一样的。
也见 SUNPRO_DEPENDENCIES 。

GCC_EXEC_PREFIX
如果定义了该环境变量,它会作为编译程序执行的所有子程序名字的前缀。例如,
如果将变量设置为 testver 而不是查找 as ,汇编器首先会在名字testveras 下查找。
如果在此没有找到,编译程序会继续根据它的普通名进行查找。可在前缀名中使用斜线指出路径名。
GCC_EXEC_PREFIX 的默认设置为 prefix /lib/gcc-lib/ ,这里的 prefix 是安装编译程序时 configure 脚本指定的名字。
该前缀也用于定位标准连接程序文件,包含进来作为可执行程序的一部分。如果使用 -B 命令行选项,会重写该设置。
也见 COMPILER_PATH 。

LANG
该环境变量用于指出编译程序使用的字符集,可创建宽字符文字、串文字和注释。
定义 LANG 为 C-JIS ,指出预处理程序将多字节字符按照 JIS (日语工业标准)字符进行解释。
 C-SJIS 可用来指出 Shift -JIS 字符而 C-EUCJP 指出日文 EUC 。如果没有定义 LANG ,或定义为不可识别,
函数 mblen() 被用来确定字符宽度,而 mbtowc() 用来将多字节序列转换为宽字符。

LC_ALL
如果设置,该环境变量的值重写 LC_MESSAGES 和 LC_CTYPE 的所有设置。
LC_CTYPE 该环境变量指出引用串中定义的多字节字符的字符分类。主要用于确定字符串的字符边界,
字符编码需要用引号或转义符,可被错误地解释为字符串的结尾或特殊字符串。对 Australian English ,
可将它设置为 en_AU ; 对 Mexican Spanish ,可将它设置为 es_MX。如果没有设置该变量,
默认为 LANG 变量的值,或如果没有设置 LANG ,那就使用 C 英语行为。也见 LC_ALL 。

LC_MESSAGES
该环境变量指出编译程序使用何种语言发出诊断消息。对 Australian English ,可设置为 en_AU ;
对 MexicanSpanish ,可设置为 es_MX 。如果变量没有设置,使用 LANG 变量的默认值,
或如果没有设置 LANG ,那就使用 C英语行为。也见 LC_ALL 。

LD_LIBRARY_PATH
该环境变量不会影响编译程序,但程序运行的时候会有影响。变量指定一个目录列表,
程序会查找该列表定位共享库。只有当未在编译程序的目录中找到共享库的时候,执行程序必须设置该变量。

LD_RUN_PATH
该环境变量不会影响编译程序,但程序运行的时候会有影响。该变量在运行时指出文件的名字,
运行的程序可由此得到它的符号名字和地址。地址不会重新载入,
因而可能符号引用其他文件中的绝对地址。这和 ld 工具使用 -R 选项完全一样。

LIBRARY_PATH
该环境变量可设置为一个或多个目录名字列表,连接程序会搜寻该目录,以查找特殊连接程序文件,
和由 -l (字母 l )命令行选项指定名字的库。由 -L 命令行选项指定的目录在环境变量的前面,
首先被查找。也见 COMPILER_PATH 。

OBJC_INCLUDE_PATH
在编译 Objective-C 程序的时候使用该环境变量。一个或多个目录名的列表由环境变量指定,
用来查找头文件,就好像在命令行中指定 -isystem 选项一样。
所有由 -isystem 选项指定的目录会首先被查找。
也见 CPATH 、 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 。

SUNPRO_OUTPUT
为文件名设置该环境变量会令预处理程序将基于依赖关系的 makefile 规则写入文件。会包含系统头文件名。
如果环境变量被设置为单个名字,它将会被当作文件名,依赖关系规则中的名字将由源文件的名字中获得。
如果定义中有两个名字,第二个名字就是依赖关系规则中的目标名。设置该环境变量的结果与在命令行中
使用参数 -M 、 -MF 和 -MT 的效果一样。参见 DEPENDENCIES_OUTPUT 。

TMPDIR
这个变量包含了供编译程序存放临时工作文件的目录的路径名。这些文件通常在编译过程结束时被删除。
这种文件的一个例子就是由预处理程序输出并输入给编译程序的文件。

============================================================
                                        把GCC的编译信息重定向到一个文件
如果使用简单的管道重定向如下:
gcc -c test.c > error.txt
这种方式是不行的。
一种简单的方法,就是Unix下错误输出的ID一般为2,那么我们在重定向的时候,
重定向符号改为2>就可以了,如下所示:
gcc -c test.c 2> error.txt

原创粉丝点击