gcc相关
预处理
宏替换, 头文件展开, 去注释 xxx.c-->xxx.i-E
, 调用处理器cpp编译
xxx.i --> xxx.s 生成汇编文件-S
, 调用编译器gcc, 编译的过程最消耗时间,汇编
xxx.s --> xxx.o 生成二进制文件-c
, 调用连接器ld连接, 没有参数, 默认输出a.out
可执行文件
zyb@server:~$ g++ -E test.cpp &> test.i # 需使用文件重定向, 否则输出至屏幕zyb@server:~$ g++ -S test.i zyb@server:~$ g++ -c test.s zyb@server:~$ g++ test.o -o test.appzyb@server:~$ ls test.*test.app test.cpp test.i test.o test.s
gcc常用参数
-I
编译时指定头文件目录 -L
指定静态库所在目录 -l
指定静态库的名字 -o
指定生成文件的名字 -c
将汇编文件生成二进制文件, 得到一个.o
文件 -g
生成文件内含调试信息, 文件会比没有调试信息大 -D
在编译的时候指定一个宏, 在测试程序时使用 -Wall
输出警告信息 -O#
#代表优化级别, 有1, 2, 3可选 zyb@server:~/dir_test$ cat ./include/head.h #ifndef __HEAD_H__#define __HEAD_H__#define NUM1 10#define NUM2 20int add(int a, int b);int div(int a, int b);int mul(int a, int b);int sub(int a, int b);#endifzyb@server:~/dir_test$zyb@server:~/dir_test$ cat sum.c #include#include "head.h"int main() { int a = NUM1; int aa; int b = NUM2; int sum = a + b; #ifdef DEBUG printf("The sum value is: %d + %d = %d\n", a, b, sum);#endif return 0;}zyb@server:~/dir_test$zyb@server:~/dir_test$ gcc sum.c -I ./include/ -D DEBUGzyb@server:~/dir_test$ ./a.out The sum value is: 1 + 2 = 3zyb@server:~/dir_test$ gcc sum.c -I ./include/ # 没有编译时没有-D选项 zyb@server:~/dir_test$ ./a.out # 不会输出打印信息zyb@server:~/dir_test$ gcc sum.c -I ./include/ -Wall # 输出警告sum.c: In function ‘main’:sum.c:8:6: warning: unused variable ‘sum’ [-Wunused-variable] int sum = a + b; ^sum.c:6:6: warning: unused variable ‘aa’ [-Wunused-variable] int aa;