GCC备忘录

来源:互联网 发布:生产订单跟踪软件 编辑:程序博客网 时间:2024/05/18 21:44

 首先,向Richard Stallman大叔致敬!
我们可以不完全赞成他那带有共产主义色彩的自由软件理念,但我们不能不为他那种不懈追逐自由的精神所感动,更不能不为在工作过程中能够自由使用这么多好得要命的GNU工具而心存感激。

1. GCC是GNU Compiler Collection的缩写,我们不能因为它包含了两个C便认为它只是一个C编译器,它几乎支持当前所有使用中的计算机语言。

2. 基本选项
--version
查看简单的版本信息,如GCC 3.4.3,请略微注意一下那条信息“Copyright (C) 2004 Free Software Foundation, Inc. This is free software; ”

-v
显示编译生成当前使用的GCC时所采用的配置信息,据此可以获取当前GCC所支持的选项。

-print-search-dirs
显示可执行程序和静态链接库的搜索路径。

-o filename
显式指定输出文件。

3. 基本C/C++选项
-c
只编译,不链接,生成相应的.o文件。

-S
生成汇编代码到相应的.s文件。

-E
只进行预处理,完成头文件的包含、条件编译及宏替换等,并输出到标准输出设备上。

-w
隐藏警告信息。

-Wall
给出大部分警告信息,比如最常见的"unused variable"。

-Werror
将所有警告信息作为错误并中止编译。

-pedantic
执行严格的ISO C/C++检查,对所有不符合ISO C/C++规范的语法给以警告。

-pedantic-errors
将所有-pedantic选项给出的警告信息作为错误并中止编译。

-g
生成调试信息。

-Ox
优化选项。
O0:不进行优化,O1:优化,O2:进一步优化,O3:更进一步优化,Os:针对代码体积进行优化

-D name
-D name=definition
在编译命令行进行宏定义。

-I dir
增加一个目录到头文件搜索列表中。
从搜索次序的角度来讲,这个选项指定的搜索目录在标准系统头文件搜索路径之前。

-nostdinc
不搜索标准系统头文件路径。

-isystem dir
增加一个目录到头文件搜索列表中。
从搜索次序的角度来讲,这个选项指定的目录在标准系统头文件搜索路径之前,但在-I指定的搜索路径之后。

-llib
要求链接器链接名为liblib.a的静态库或名为liblib.so的动态库。

-Ldir
增加一个目录到静态链接库的搜索路径中。

-static
实行静态链接,避免使用动态库。

-shared
生成动态库文件(这个选项需要与-fpic选项共同使用)。

-fpic
生成位置无关代码,此类代码可以被装载到内存的任何位置运行。

-nostdlib
不链接标准库,因此也就无法使用标准库提供的入口例程,也不需要main函数。
在使用这个选项的时候,需要显式指定可执行程序的入口地址,否则系统将.text节的起始地址作为入口地址。
这个选项通常用于编译bootloader和kernel等不在OS环境下运行的代码。

-e symbol
显式指定symbol为可执行程序入口。

-Tscriptfile
显示指定scriptfile作为链接器的脚本。

-Wl, option
传递选项给链接器ld。

-x language(c, c++, ...)
强制指定源文件的编程语言(忽略扩展名)。
利用这个选项可以强制c语言源文件在编译过程中按照c++的规则生成符号,更便于c++代码调用。

4. 预定义宏
__FILE__ 一个字符串常量形式的当前输入文件名。
__LINE__ 一个十进制整数形式的当前代码行数。
__DATA__ 一个字符串常量形式的当前日期。
__TIME__ 一个字符串常量形式的当前时间。
__cplusplus 一个标识C++的宏
__GCC__ GCC内定义宏。
__VERSION__ 一个字符串常量形式的当前编译器版本号。


除了最最常用的几个选项如-c -o -Wall -O -g -l -L -I等,好多GCC的选项并不很容易记得住,于是常常要查Manual,然而Manual又那么庞大,便整理了这份备忘录并希望不断地增加内容。
埋头看Manual是不现实的——即使是中文版,如果没有亲自使用和体会,许多选项并不是很容易理解,比如-fpic,-nostdlib等。

原创粉丝点击