-c
只编译不链接(连接?)
没有将函数库中的内容复制到可执行文件中,一般是多人分工合作时每人做一部分,-c 生成.o目标文件,最后把所有的目标文件拿到一起连接. (1 2 3 4)
连接使用ld命令,如:ld f1.o f2.o /lib/libc.a 然后可以生成一个可执行文件.(5)
[注]/lib/libc.a是库名,必须将它放在.o目标文件之后!
-D FOO=BAR
在命令行定义预处理宏FOO,其值为BAR
与在程序中处理一样
#define FOO BAR
-I DIRNAME
将DIRNAME加入到头文件的搜索目录列表中.
在这里多说两句,程序的头文件一般有三种形式:
#include
#include "mylib.h"
#include "/usr/person/lib/mylib.h"
第一种形式,编译器看到<>,就会到存放C库函数的目录中寻找包含的文件,一般在/usr/include路径下,这称为标准形式。
第二种形式,编译器看到"",会先在用户当前的目录下寻找要包含的文件,如果没有找到,再按标准方式查找。
第三种形式,也是"",但是包含路径,编译器先会在当前路径搜索,没找到去指定的路径下寻找要包含的文件,若仍没找到,会按标准方式查找,如果还没找到,会报错,十有八九是你""里的路径写错了。
这里的-I 参数可以第二种情况下使用,给出路径后,编译器的处理过程就和第三种情况一样了。
gcc test.c -o second -I /usr/person/lib (可以是相对路径)
-L DIRNAME
将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库
与-I 参数功能相同,只是这个参数可以指定多个路径,具体来说参数内容必须是用:隔开的路径名称(绝对路径)的列表,列表元素之间以;分隔
gcc test.c -o third -I /usr/person/lib -L dir1:dir2;dir3:dir4/
-static
链接静态库,即执行静态链接
-lFOO
链接名为libFOO的函数库
-g
在可执行程序中包含标准调试信息
-ggdb
在可执行程序中包含只有GNU debugger才能使别的达两条是信息
-O
优化编译过的代码
-ON
指定代码优化的级别为N,o<=N<=3
-ansi
支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突的部分
(但这一选项并不能保证生成ANSI兼容的代码)
-pedantic
允许发出ANSI/ISO C标准所列出的所有警告
-pedantic -errors
允许发出ANSI/ISO C标准所列出的所有错误
-traditional
支持Kernighan & Ritchie C语法(如用旧式语法定义函数);如果不知道这个选项的含义,也没有关系
-w
关闭所有警告,建议不要使用此项
.Wall
允许发出gcc能提供的所有有用的警告,也可以用-W(warning)来标记指定的警告
-werror
把所有警告转换为错误,以在警告发生时中止编译过程
-MM
输出一个make兼容的相关列表
-v
显示在编译过程的每一步中用到的命令