- 在学习常用的gcc命令行参数前,先了解gcc在执行编译工作的过程
1、预处理,生成 .i 的文件[预处理器cpp]
2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]
4、连接目标代码, 生成可执行程序 [链接器ld]
- -E:执行到预处理
//输出预编译结果
gcc main.c -E
- -S:执行到源代码到汇编代码的转换
//输出汇编代码
gcc main.c -S
- -c:执行到编译
//输出目标文件(.o为后缀名的文件)
- -o:生成目标文件
//生成qq.exe可执行程序(windows下)
gcc main.c -o qq
//生成.i文件
gcc -E test.c -o test.i //.i文件
- -g或者-ggdb:生成供调试用的可执行文件
gcc main.c -g
- -O:编译器对代码进行自动优化编译,输出效率更高的可执行文件
//-O后面还可以跟上数字指定优化级别,常用的数字0-3.
//O0表示不做优化,O1为默认优化
gcc main.c -O2
- -W:在编译中开启一些额外的警告(warning)信息
gcc main.c -W
// -Wall:将所有的警告信息全公开
gcc main.c -Wall
// -w:关闭所有警告信息
- -v/--version:查看编译器版本
- -I:编译时指定头文件路径
//main.c文件内容如下:
#include <stdio.h>
#include "log.h"
int main()
{
printf("logNum:%d\n",logNum);
return 0;
}
//log.h文件的内容如下
#ifndef _LOG_H_
#define _LOG_H_
const int logNum = 10;
#endif
//main.c与comon文件夹位于同级目录下
//-I指明head.h所在的目录,-o指定生成可执行程序的名称
gcc main.c -I ./comon/ -o qq
- -L dirname:指明链接过程中链接程序ld到指定的目录中寻找。
//-L dirname:确定库文件(.so和.a的集合)所在的目录
- -lname:链接时装载名为libname.a的函数库。Linux下的库文件在命名时有一个约定,就是应该以 lib 这3个字母开头,由于所有的库文件都遵循了同样的规范,因此在用 -l 选项指定链接的库文件名时可以省去 lib 这3个字母。
例如:-lm 表示链接名为 libm.a 的数学函数库。
- -pedantic:当gcc在编译不符合ANSI/ISO C 语言标准的源代码时,将产生相应的警告信息。
//main.c文件内容如下:
#include <stdio.h>
void main(void)
{
printf("HelloWorld");
return;
}
//将产生警告信息
gcc main.c -o qq -pedantic
- -Werror:要求 gcc 将所有的警告信息当成错误进行处理.
- -static:默认情况下,gcc 在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库。
如果需要的话,可以在编译时加上 -static 选项,强制使用静态链接库。 - -shared:生成一个共享的目标文件,它能够与其他的目标一起链接生成一个可执行的文件。:生成一个共享的目标文件,它能够与其他的目标一起链接生成一个可执行的文件。
- -save-temps:保存编译过程中生成的一些列中间文件
# gcc test.c -o test -save-temps
除了生成执行文件test之外,还保存了test.i 和 test.s,test.o中间文件,供用户查询调试。
标签:文件,gcc,生成,编译,编译器,常用命令,test,main
From: https://www.cnblogs.com/xiaocer/p/16621557.html