c语言标准
- ANSI C
- POSIX(提高UNIX程序可移植性)
- SVID(POSIX的扩展超集)
- XPG(X/Open可移植性指南)
- GNU C(唯一能编译Linux内核的编译器)
gcc 简介
名称:
- GNU project C and C++ Compiler
- GNU Compiler Collection
管理与维护 - GNU项目
对C/C++编译的控制
- 预处理(Preprocessing)
- 编译(Compilation)
- 汇编(Assembly)
- 链接(Linking)
GCC文件扩展名规范
(1).c为后缀的文件,是C语言源代码文件。
(2).h为后缀的文件,是头文件。
(3).C,.cc、.cpp、.cp或.cxx为后缀的文件,是C++源代码文件。
(4).h为后缀的文件,是程序所包含的头文件。
(5).i为后缀的文件,是已经预处理过的C源代码文件。
(6).ii为后缀的文件,是已经预处理过的C++源代码文件。
(7).m为后缀的文件,是Objective-C源代码文件。
(8).o为后缀的文件,是编译后的目标文件。
(9).s为后缀的文件,是汇编语言源代码文件。
(10).S为后缀的文件,是经过预编译的汇编语言源代码文件。
gcc使用
基本使用格式
$ gcc [ 选项 ] <文件名>
生成预处理文件
生成汇编文件
gcc –S hello.c –o hello.s
生成对应的目标文件
gcc -c hello.c -o hello.o
目标代码并不能在CPU上运行,但它离二进制可执行文件已经很近了,再输入以下编译指令即可生成二进制可执行文件。
[root@localhost~]# gcc hello.o -o hello
文件hello.c引用的头文件say_hello.h不在当前目录中,也不在GCC默认的头文件搜索路径/usr/include中,这时我们应该使用-I选项指定搜索头文件的特殊目录,具体编译指令如下:
gcc hello.c functions/say_hello.c -o hello –I functions
make
makefile文件中还可以定义一些宏,宏的作用类似于C语言中的define命令,利用它们来代表某些多处使用而又可能发生变化的内容,可以节省重复修改的工作,还可以避免遗漏
1 CC=gcc
2 CFLAGS=-Wall-c #-Wall:编译后显示所有警告
3 OBJS= hello.o say_hello.o
4 hello:${OBJS}
5 ${CC} ${OBJS} -o hello
6 say_hello.o:say_hello.c say_hello.h
7 ${CC} ${CFLAGS} say_hello.c -o say_hello.o
8 hello.o:hello.c say_hello.h
9 ${CC} ${CFLAGS} hello.c -o hello.o