今天主要学习了gcc的使用和开发,gcc是GNU项目的一部分,gcc可以对c/c++程序开发进行灵活的控制。一个c/c++程序从开始编码到生成可执行的二进制文件至少需要4个步骤: 预处理,编译,汇编,链接。通过设置不同的命令参数,gcc可以完成上述的每一步。
和大多数的shell命令一样,gcc的基本命令格式是:$gcc [选项] <文件名>,常用的选项有:-o file 将经过gcc处理过的结果存为文件file.,这个文件可能是预处理文件,汇编文件,目标文件或最终的可执行文件,而生成的可执行文件的默认名称为a.out。-c 仅对文件进行编译,不进行链接。-g 在可执行文件中加入调试信息,方便进行程序的调试。-Idir 在编译源程序的时候增加一个搜索头文件的额外目录。 -w 允许产生warning类型的警告。
在gcc中,不能采用shell中那种简化的写法。每一个命令选项中都要有自己的连字符”-“。在Linux下生成的可执行文件没有固定的扩展名,任何符合Linux要求的文件名,只要文件的访问属性中有可以执行的属性,该文件就可以执行。
一个比较简单的例子,编译hello.c并生成可执行文件:
$gcc hello.c –o hello
$./hello
Hello gcc
此外,gcc还支持多个文件的编译,其中一般函数都是由函数的声明(函数头)和函数的实现(函数体)两部分构成。按此规则我们定义一个函数和主函数。
greeting.h
#ifndef _GREETING_H
#define _GREETING_H
void greeting(char *name);
#endif
greeting.c
#include <stdio.h>
#include “greeting.h”
void greeting(char *name)
{
printf(“Hello %s/n”,name);
}
my_app.c
#include <stdio.h>
#include “greeting.h”
#defne NUM 10
int main()
{
char name[NUM];
printf(“Your name,please:”);
scanf(“%s”,name);
printf(“Your name is %s/r/n”,name);
}
若要编译并生成可执行文件:$gcc my_app.c greeting.c –o my_app.
按照相同功能的的文件放在一个文件夹下,以利于代码的进一步重构。现将greeting,c和greeting.h两个文件放在function文件目录里。此时的gcc命令中需要增加-I 选项以便gcc搜索头文件,命令如下:
$gcc my_app.c function/greeting.c –o my_app –Ifunction
分别编译的命令为:
$gcc –c my_app.c –I function
$gcc –c function/greeting,c
$gcc my_app.o greeting.o –o my_app
通过分块进行编译,将一个大的项目转化为多个小的部分,提高了软件调试,维护的效率。