1 | gcc
|
2 | ===
|
3 |
|
4 | 基于C/C++的编译器
|
5 |
|
6 | ## 补充说明
|
7 |
|
8 | **gcc命令** 使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。
|
9 |
|
10 | ### 语法
|
11 |
|
12 | ```shell
|
13 | gcc(选项)(参数)
|
14 | ```
|
15 |
|
16 | ### 选项
|
17 |
|
18 | ```shell
|
19 | -o:指定生成的输出文件;
|
20 | -E:仅执行编译预处理;
|
21 | -S:将C代码转换为汇编代码;
|
22 | -wall:显示警告信息;
|
23 | -c:仅执行编译操作,不进行连接操作。
|
24 | ```
|
25 |
|
26 | ### 参数
|
27 |
|
28 | C源文件:指定C语言源代码文件。
|
29 |
|
30 | ### 实例
|
31 |
|
32 | **常用编译命令选项**
|
33 |
|
34 | 假设源程序文件名为test.c
|
35 |
|
36 | **无选项编译链接**
|
37 |
|
38 | ```shell
|
39 | gcc test.c
|
40 | ```
|
41 |
|
42 | 将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
|
43 |
|
44 | **选项 -o**
|
45 |
|
46 | ```shell
|
47 | gcc test.c -o test
|
48 | ```
|
49 |
|
50 | 将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
|
51 |
|
52 | **选项 -E**
|
53 |
|
54 | ```shell
|
55 | gcc -E test.c -o test.i
|
56 | ```
|
57 |
|
58 | 将test.c预处理输出test.i文件。
|
59 |
|
60 | **选项 -S**
|
61 |
|
62 | ```shell
|
63 | gcc -S test.i
|
64 | ```
|
65 |
|
66 | 将预处理输出文件test.i汇编成test.s文件。
|
67 |
|
68 | **选项 -c**
|
69 |
|
70 | ```shell
|
71 | gcc -c test.s
|
72 | ```
|
73 |
|
74 | 将汇编输出文件test.s编译输出test.o文件。
|
75 |
|
76 | **无选项链接**
|
77 |
|
78 | ```shell
|
79 | gcc test.o -o test
|
80 | ```
|
81 |
|
82 | 将编译输出文件test.o链接成最终可执行文件test。
|
83 |
|
84 | **选项 -O**
|
85 |
|
86 | ```shell
|
87 | gcc -O1 test.c -o test
|
88 | ```
|
89 |
|
90 | 使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
|
91 |
|
92 | **多源文件的编译方法**
|
93 |
|
94 | 如果有多个源文件,基本上有两种编译方法:
|
95 |
|
96 | 假设有两个源文件为test.c和testfun.c
|
97 |
|
98 | **多个文件一起编译**
|
99 |
|
100 | ```shell
|
101 | gcc testfun.c test.c -o test
|
102 | ```
|
103 |
|
104 | 将testfun.c和test.c分别编译后链接成test可执行文件。
|
105 |
|
106 | **分别编译各个源文件,之后对编译后输出的目标文件链接。**
|
107 |
|
108 | ```shell
|
109 | gcc -c testfun.c #将testfun.c编译成testfun.o
|
110 | gcc -c test.c #将test.c编译成test.o
|
111 | gcc -o testfun.o test.o -o test #将testfun.o和test.o链接成test
|
112 | ```
|
113 |
|
114 | 以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
|
115 |
|
116 |
|
117 |
|
\ | No newline at end of file |