首先,向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等。
GCC备忘录
最新推荐文章于 2024-11-27 22:16:46 发布