GNU编译工具
是GNU组织为了编译Linux内核源码而开发的一款编译工具,经过长时间的发展目前已经成为一个编译平台,能够支持多种编程语言、能够在主流操作系统中使用,编译C代码的工具gcc,编译C++代码的工具g++
通过 工具名 -v 参看编译工具的版本信息
gcc常用的编译参数:
gcc [选项参数] 文件 -E # 预处理 -S # 生成汇编文件 -c # 生成目标文件 -o # 设置编译结果的名字 -ohehe == -o hehe -I # 指定要导入的头文件的路径 -I /path -l # 指定要导入的库文件 例如:-lm导入数据库 -L # 指定要链接的共享库的路径 -D # 编译时定义宏 -D宏名 -g # 编译时添加调试信息,这样的编译结果可以通过gdb调试 -Wall # 尽可能多的产生警告,编译器更严格地检查代码 -Werror # 把警告当做错误处理 -std # 指定编译器遵循的语法标准 gnu89\gnu99\gnu11 -pendantic # 对一些不符合ANSI\ 标准的代码、扩展代码会产生警告 # case a ... b:
gcc相关的文件类型:
xxx.c # 源文件 xxx.h # 头文件 xxx.i # 预处理文件 xxx.s # 汇编文件 xxx.o # 目标文件 xxx.h.gch # 头文件的编译结果,用于检查头文件语法,必须立即删除 libxxx.a # 静态库文件 Windows中以.lib结尾 libxxx.so # 动态库文件\共享库文件 Windows中以 .dll结尾
gcc把C语言变成可执行程序的过程:
# 1、预处理 gcc -E xxx.c #把预处理结果显示到屏幕上 gcc -E xxx.c -o xxx.i #生成.i结尾的预处理文件 # 2、把预处理文件 编译成汇编文件 gcc -S xxx.i #生成.s结尾的汇编文件 # 3、把汇编文件翻译成二进制的目标文件 gcc -c xxx.s #生成.o结尾的目标文件 # 4、把若干个目标文件、库文件合并生成可执行文件 gcc a.o b.o c.o ... #默认生成a.out可执行文件
gcc支持的预处理指令:
#include #define #undef #if #elif #ifdef #ifndef #endif #wanring # 在预处理时产生警告信息 #error # 在预处理时产生错误,并阻止可执行文件生成 #line # 指定行数 #pragma pack(1\2\4\8) # 设置按1\2\4\8字节数进行内存对齐、补齐 #pragma once # 相当于头文件卫士 #pragma GCC posion <标识符> # 禁用标识符 #pragma GCC dependency "文件名" # 能够监控文件 如果该文件比本文件更新则产生警告
gcc预定义的宏:
int main(int argc,const char* argv[]) { printf("%s\n",__FILE__); printf("%s\n",__func__); printf("%s\n",__FUNCTION__); printf("%d\n",__LINE__); printf("%s\n",__DATE__); printf("%s\n",__TIME__); printf("%ld\n",__cplusplus); }