编译过程 文件扩展名 .c, / .C, .cc | c/c++ 源代码 | .i, / .ii | 预处理后的 c/c++ 源代码 | .S, .s | 汇编 源代码 | .o | 目标 代码 | .a, .so | 库 代码 | 常用命令行选项 -o | 目标代码 | -c | 只编译不链接 | -DFOO=BAR | 定义预处理宏 | -IDIRNAME | include 包含目录 | -LDIRNAME | include 库目录 | -static | 只链接静态库 | -lFOO | 链接libFOO.so的库 | -g | 包含标准调试信息 | -ON | 优化编译(0<=N<=3), 默认为1 | -w | 关闭所有警告 | -Wall | 开启所有警告 | -Werror | 把所有警告报告为错误 | -fsyntax-only | 只检查语法而不进行编译 | -MM | 输出一个make兼容的相关列表(没反应?) | -v | 显示编译用到的每一步命令(好多,没多大必要) | 链接静态库和动态库的例子 $gcc main.c –L/home/ubuntu/lib –I/home/ubuntu/include –lnew –o main $gcc main.c –L/home/ubuntu/lib –I/home/ubuntu/include –lnew –static –o main 常用优化选项 -finline-functions | 把所有简单函数在通用它们的函数中就地展开 | -funroll-loops | 展开所有能在编译时确定重复次数的循环体 | -fomit-frame-pointer | 如果函数不需要则丢掉帧指针 | 。。。 | 。。。 | 内联和循环展开技术能大大提高程序的执行速度。 在上表中是比较详细的针对性选项。一般情况下,最好选择定义好的-O1, –O2, –O3, 即可。用O2的比较多。 调试选项 -g | 标准调试信息 | -p | 加入prof程序能够识别的剖析符号信息 | -pg | 加入gprof程序能够识别的剖析符号信息 | |