gcc的使用(2)
基本使用格式
$ gcc [选项] <文件名>
1.常用选项及含义
gcc常用选项 | |
选项 | 含义 |
-o file | 将经过gcc处理过的结果存放为文件file,这个结果文件可能是预处理文件、汇编文件、目标文件或最终的可执行文件。假设被处理的源文件为source.suffix,如果这个选项被省略了,那么生成的可执行文件默认名为a.out;目标文件默认名为source.o;汇编文件默认名为source.s;生成的预处理文件则发送到标准输出设备。 |
-c | 仅对源文件进行编译,不链接生成可执行文件。在对源文件进行查错时,或只需产生目标文件时可以使用该选项 |
-g[gdb] | 在可执行文件中加入调试信息,方便进行程序的调试。如果使用中括号中的选项,表示加入gdb扩展的调试信息,方便使用gdb进行调试 |
-O[0、1、2、3] | 对生成的代码使用优化,中括号中的部分为优化级别,缺省的情况为2级优化,0为不进行优化。注意,采用更高级的优化并不一定得到效率更高的代码。 |
-Dname[=definition] | 将名为name的宏定义definition,如果中括号中的部分缺省,则宏被定义为1 |
-Idir | 在编译源程序时增加一个搜索头文件的额外目录—dir,即include增加一个搜索的额外目录。 |
-Ldir | 在编译链接文件时增加一个额外的库,库名为library.a |
-w | 禁止所有警告 |
-Wwarning | 允许产生warning类型的警告,warning可以是:main、unused等很多取值,最常用是-Wall,表示产生所有警告。如果warning取值为error,其含义是将所有警告作为错误(error),即出现警告就停止编译。 |
2.多文件的C程序
在实际开发中,为了使代码结构更合理且更方便进行代码的重用,通常采用将主函数和其它函数放在不同文件中的方法。除了主程序外,每个函数由函数声明(函数头)和函数实现(函数体)两部分组成。函数的声明一般放在头文件(.h)中,而函数的定义放在实现的文件(.c、.cpp)中。
例:
1.先创建多个C程序
用vi 编辑器 编辑C程序
greeting.h
greeting.c
my_app.c
2.执行文件
如果还是使用之前介绍的命令,直接编译my_app.c来生成可执行文件,gcc会出现错误:
(错误信息可能会因为系统的不同而稍有差异。产生错误的原因是gcc没有找到greeting.h)
正确的编译运行步骤:
方法1
1.编译生成可执行文件
2.执行可执行文件 my_app
3.运行结果:输入:123 输出:Hello 123!
(由上面创建c程序文件可以看出程序存储的目录结构。由于文件my_app.c引用的头文件既不在当前目录中,也不在GCC默认的头文件搜索路径(/usr/include)中,因此增加了-I参数functions,该参数作为一个目录路径,gcc将在functions目录下搜索头文件(greeting.h)。程序生成的可执行文件为当前工作目录下的my_app文件)
方法2
除此之外,还可以将上面的命令调用方式分解为几个步骤进行。与上面的一次性调用相比,这种方法虽然没有本质改变,但也是经常采用的方式之一,它可以简化每一条命令,从而更好地组织代码,命令如下:
通过分块进行编译,将一个大的项目转化为多个小的部分,能提高软件调试和维护的效率。