gcc编译命令的常用选项——强烈推荐大家使用 -Wall 选项
C程序编编译的过程分为如下四个阶段
1.预处理:头文件展开(#include)、宏替换(#define)、条件编译(#ifdef)(.i)使用预处理器(预处理阶段处理的都是以#开头的代码)
2.编译:检查语法、转成汇编、生成汇编文件(.s/.S)使用编译器
3.汇编:由汇编变为目标代码(机器代码)生成目标文件(.o)使用汇编器as
4.链接:链接所有目标文件,生成可执行程序,使用链接器ld
gcc编译命令的常用选项
(0)-Wall:开启所有警告(可以理解为warinig all),使用它能够使GCC产生尽可能多的警告信息。(非常推荐使用该选项)
GCC给出的警告信息虽然从严格意义上说不能算作错误,但却很可能成为错误的栖身之所。一个优秀的Linux程序员应该尽量避免产生警告信息,使自己的代码始终保持标准、健壮的特性使用它能够使GCC产生尽可能多的警告信息。。所以将警告信息当成编码错误来对待,是一种值得赞扬的行为!
看下面这张图,第一眼看到这个警告的时候,有点没搞明白是什么意思,因为平时很少会碰到这种警告,回到源代码中,检查的时候也没有发现问题在哪,直到翻译了这个才明白是怎么一回事。。。
警告:建议将赋值作为真值使用
原来是我将判断语句,误写成了赋值语句,这会导致什么后果呢?那就是,无论rate为何值时,这个后面跟的语句都会执行。
而这种警告,编译器一般是不会抛出来,因为这个语句是合法的 (lll¬ω¬)
加了-Wall选项后就不一样了,它会抛出你代码中很多的一些小问题,像声明的变量在代码中没有用到也会抛出警告。
总之,编译的时候加上-Wall选项,有百利而无一害
(1)-E:只进行预处理(.i)
gcc -E demo.c > demo.i :将预处理信息放到.i文件中
(2)-S:只激活预处理和编译,就是指把文件编译成为汇编代码。(.s/.S)
(3)-c:只激活**预处理,编译,和汇编,**也就是他只把程序做成obj文件(.o)
(4)-o:指定编译生成的文件名
(5)-g 生成调试信息。GNU 调试器可利用该信息。
(6)-I(大写i)+路径:指定头文件的第三方搜索路径
- #include “stdio.h”和#include <stdio.h>的区别:搜索路径不同
- < >:在系统头文件目录(/usr/include)中搜索,若没有,则报错
- “ ”:先在当前目录中搜索,若没有,则去系统头文件目录中搜索,若还没有,在报错
- 规范:<> :包含系统头文件 “”:包含自定义文件
(7)-L:指定链接所需库(动态库或静态库)所在路径
(8)-l(小写L):指定所需链接库的库名
(9)-static:强制使用静态链接库
默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库
(9)-O1 -O2 -O3:编译优化
gcc -O1 demo.c -o demo :一级优化
gcc -O2 demo.c -o demo :二级优化
gcc -O3 demo.c -o demo :三级优化
(time ./demo:可以测算代码运行的时间)
(10)-w:关闭警告
gcc -w demo.c -o demo
(不推荐使用,警告可能不影响程序的执行,但忽视警告运行时可能会造成程序上的一些问题)
(11)-O1 -O2 -O3:编译优化
gcc -O1 demo.c -o demo :一级优化
gcc -O2 demo.c -o demo :二级优化
gcc -O3 demo.c -o demo :三级优化
(time ./demo:可以测算代码运行的时间)
(12)-fPIC:生成位置无关的代码,适用于动态链接
(13)-shared:生成共享目标文件,通常用在建立共享库时。
gcc编译命令的常用选项——强烈推荐大家使用 -Wall 选项相关推荐
- gcc/g++ 命令的常用选项
gcc/g++ 命令的常用选项 使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错.假如在程序中用到new delete操作,而 ...
- Gcc编译链接及常用选项总结
转载文章:http://www.franktly.com 前言 GNU CC(简称Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object- C等语言编写的程序.Gcc ...
- gcc编译c文件常用命令参数解释
gcc编译c文件 gcc是常用来编译c语言程序的编译器,了解它编译c语言的命令参数,对c/c++语言的学习是有一定好处的. gcc编译文件一步到位的命令格式 gcc main.c -o main.ex ...
- GCC 编译命令和基本使用
gcc编译一个c文件的过程,会经过几个步骤:预编译,编译,汇编,链接. 编译命令 -E:预编译, 讲带#的语句重新展开到制定文件中 比如#define, #include "*.h" ...
- Linux gcc编译简介、常用命令
gcc作为linux平台下的标准C编译器,功能很强大.格式如下: gcc [option] [filename] -x language 指定使用的语言 -c 对文件进行编译和汇编,但不进行连接 -S ...
- gcc 编译命令选项$@ $^ $
一些常见的自动化变量说明如下: (1) $@ --目标文件的名称: (2) $^ --所有的依赖文件,以空格分开,不包含重复的依赖文件: (3) $< --第一个依赖文件的名称. (4) $? ...
- Linux GCC 编译过程分析及常用检错的编译选项
文章目录 简介 一.拆解编译过程 1.准备源程序 2.分析拆解过程 3. 多个程序文件的编译 4.检错的编译选项 1.-pedantic 编译选项 2.-Wall 编译选项 3.-Werror 编译选 ...
- Linux gcc编译命令
编写一个C程序 1.用文本文件编写代码 用 touch 命令:"touch 文件名" 可以创建一个文件(比如 touch hello.c),如下图: 在命令行输入 touch he ...
- gcc 编译C语言最全命令
gcc 编译命令 最简单的编译命令是: gcc main.c 默认生成的可执行文件是 a.out 如果需要指定输出文件,则需要使用如下的命令: gcc main.c – o main ...
最新文章
- 邮件服务器SASL TLS 反垃圾邮件系统
- spring整合mybatis是如何配置事务的?
- python3虚拟环境搭建_python3 =虚拟环境的搭建
- C#结构体中数组的分配
- 局域网网管软件_网管软件有哪些?那些不同之处
- geoda权重矩阵导入matlab,空间计量经济学-分析解析.ppt
- mysql java dbutil_Java -- DBUtils 框架 操作MySQL数据库
- python玩转单片机_Python玩转单片机:从基础到进阶,几款主流的开发板大盘点!...
- J1939协议之通俗易懂----简介
- 数学分析教程(科大)——2.6笔记+习题
- 高数 | 【不定积分】基础知识点梳理 及 经典例题、李林880求不定积分例题
- JavaScript 资源大全
- 因果分析.科学实验评估
- 吸人大法!最吸引人气的网吧LOL活动策划方案,此秘籍值得收藏!
- 主数据管理方法论之主数据全生命周期管理
- (极光推送)短信验证码
- 内分泌6项检查费用_内分泌6项检查费用是多少 详解内分泌6项检查是什么
- 2017计算机研究生专业排名,2017年USNews美国大学计算机硕士研究生专业排名TOP110...
- [微机原理]多点模拟量计算机数据采集实验
- 发票识别100%智能
热门文章
- Android11不申请储存权限,Dolphin 模拟器开发者:由于 Android 11 存储权限收紧,模拟器功能将受限...
- 用Natapp(ngrok)进行微信本地开发调试
- 牛逼!JetBrains 又出了一款编程神器!协同编程!
- Wifi控制帧:RTS/CTS和ACK
- android照片美颜项目_MagicCamera: MagicCamera 是 Android 平台开源相机项目,具有包括实时美颜等40种实时滤镜,功能包括对图片进行磨皮/美白等后期处理...
- matlab 脸部血容积脉搏波,脉搏血氧仪中光电容积脉搏波的软件检出方法
- Lab BGP Dampening
- 量纲分析-破解原子弹爆炸能量的利器
- Unity制作多屏幕解决方案
- Post请求和Get请求的区别