gun编译器是GNU组织为了编译Linux内核源码而开发的一款编译工具,
经过长时间的发展目前已经成为一个编译平台,能够支持多种编程语言(C、C++、Java、Objective-C、Ada、C#)
和操作系统(UNIX、Linux、Windows),gcc -v 可以查看编译器版本。
gcc -E code.c -o code.i -> code.i
gcc -S code.i -> code.s
gcc -c code.s -> code.o
gcc code.o ... -> a.out
参数:
-E 预处理
-S 产生汇编文件
-c 只编译不链接
-o 指定输出文件的名字
-Wall 尽可能多的产生警告 (一般调试项目都要加上)
-Werror 把警告当错误处理 (一般调试项目都要加上)
-x 指定源代码的语言
-g 生成调试信息
-pedantic 对不符全ANSI标准的语法产生警告(对gcc扩展的语法产生警告)。
文件后缀:
.h 头文件
.h.gch 头文件的编译结果,会被优先使用,建议立即删除
.c 源文件
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 共享(动态)库文件
编译多个文件:
1、头文件作用
头文件卫士
声明外部变量、函数、类、结构、联合、枚举
定义宏、类型别名
包含其它头文件
*2、包含头文件时要注意(重要)
#include <> 从系统指定的位置加载。
#include "" 先从当前目录下加载,再从系统指定的位置加载。
当没函数声明时,编译器会猜测函数的格式,这种猜测行为叫函数隐式声明。
头文件卫士演示:
#ifndef CODE.H
#define CODE.H
/*
代码......函数声明,结构体等定义,全局变量声明。。。
*/
#endif//CODE.H
头文件的三种定位方式:
1、#include "路径/xxx.h" 直接把路径写在代码中,但如果头文件路径发生变化,需要修改源代码。
2、gcc -I目录 在编译时指定加载头文件的路径。
3、设置C_INCLUDE_PATH环境变量,来添加头文件的查找路径。
打开配置文件:vim ~/.bashrc
在文件末尾添加一行内容:export export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/zhizhen/Linux环境编程day01/include
重新加载配置文件:source ~/.bashrc
env命令可以查看所有环境变量。
扩展:PATH环境变量代表是命令的查找路径,把.添加进去以后再执行程序就不需要./了。
注意:删除环境变量时需要退出终端,再重新打开