版权声明:本文为博主原创文章,转载请注明博客地址: https://cloud.tencent.com/developer/article/1454525
GCC仅仅是一个编译器,不是IDE,没有界面,只能在命令行下使用。GCC是可以直接完成源文件的编译。经常使用的命令就是直接生成一个可执行文件。
代码语言:javascript复制gcc 源文件 -o 可执行文件
这样的方式,可以把源文件直接编译为可执行文件,并且为可执行文件指定名称。更加简单的编译命令如下
代码语言:javascript复制gcc 源文件
这样生成的可执行文件,默认名字是a.out。例如:
可以看到,默认生成的可执行文件名字就是a.out。这个.out后缀对于Linux是没有意义的,Linux的文件类型就是那么几类。它不依文件后缀来区分文件类型。下面按照指定可执行文件的名称来编译一次。
GCC是可以分步编译源文件的。其过程正如学习C语言的时候讲述的一致,如下图所示。
代码语言:txt复制 打开helloworld.i文件可以看到,头文件会被包含进来。形成一个很大的文件。接下来,将预处理过的文件进行编译。
- 预处理使用选项“-E”。预处理阶段展开宏,文件包含,条件编译。在正常情形下,GCC不会保留预处理阶段的文件,但是使用-E选项可以保留。例如
- 编译是对上面的.i文件进行的,编译完成以后生成汇编文件。 gcc -S helloworld.i -o helloworld.s 打开 helloworld.s文件,可以看到汇编语言。
- 汇编,将上面生成的汇编语言编译为目标机器的二进制文件。只汇编,不链接。 gcc -c helloworld.s -o helloworld.o
- 链接,链接器把多个二进制的目标文件(.o文件)链接成一个单独的可执行文件。在链接过程中,它必须把符号(变量名、函数名等一些列标识符)用对应的数据的内存地址(变量地址、函数地址等)替代,以完成程序中多个模块的外部引用。最终生成可执行文件。 gcc helloworld.o -o helloworld 上面的代码很简单,不需要链接什么,直接生成可执行文件。
当头文件和源文件非常多的时候,使用GCC基本命令编译是非常麻烦的。每次调试都需要重新编译。这时候你可能会想到使用IDE吧!不使用GCC了。不能一键编译,好蠢,好麻烦。幸运的是,虽然GCC没有自动项目管理工具,但是它提供了Makefile文件来帮助我们提高写程序的效率。
GCC可以使用-O0,-O1,-O2,-O3可以优化程序。O0表示不优化,O3表示优化等级最高。
GCC使用-Wall来打印警告信息,这样有助于调试程序。
GCC使用-w来忽略所有的警告。
GCC使用-g包含调试信息,这在使用gdb调试的时候是必要的。