gcc相关
-
预处理
-E
, 调用处理器cpp
宏替换, 头文件展开, 去注释
xxx.c-->xxx.i -
编译
-S
, 调用编译器gcc, 编译的过程最消耗时间,
xxx.i --> xxx.s 生成汇编文件 -
汇编
-c
, 调用连接器ld
xxx.s --> xxx.o 生成二进制文件 -
连接, 没有参数, 默认输出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.app
zyb@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 20
int add(int a, int b);
int div(int a, int b);
int mul(int a, int b);
int sub(int a, int b);
#endif
zyb@server:~/dir_test$
zyb@server:~/dir_test$ cat sum.c
#include <stdio.h>
#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
", a, b, sum);
#endif
return 0;
}
zyb@server:~/dir_test$
zyb@server:~/dir_test$ gcc sum.c -I ./include/ -D DEBUG
zyb@server:~/dir_test$ ./a.out
The sum value is: 1 + 2 = 3
zyb@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;