【相关整理】gcc常见参数整理

周生政

make约定俗成的规范:

  • 1,首先从源代码生成目标文件(预处理,编译,汇编),"-c"选项表示不执行链接步骤。

$(CC) $(CPPFLAGS) $(CFLAGS) example.c -c -o example.o

  • 2,然后将目标文件连接为最终的结果(连接),"-o"选项用于指定输出文件的名字。

$(CC) $(LDFLAGS) example.o -o example

  • 有一些软件包一次完成四个步骤:

$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) example.c -o example

CFLAGS 与 CXXFLAGS

CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。大多数程序和库在编译时默认的优化级别是”2″(使用”-O2″选项)并且带有调试符号来编 译,也就是 CFLAGS=”-O2 -g”, CXXFLAGS=$CFLAGS 。事实上,”-O2″已经启用绝大多数安全的优化选项了。另一方面,由于大部分选项可以同时用于这两个变量,所以仅在最后讲述只能用于其中一个变量的选 项。[提醒]下面所列选项皆为非默认选项,你只要按需添加即可。

LDFLAGS

ld用于指定链接时参数

gcc参数解释

编译

  • c 编译
  • Wall 最常用到的编译警告, 推荐总是使用该选项
  • o 小写字母o指定结果文件名称
  • l 链接库。编译器选项“-lNAME”试图链接标准库目录下的文件名为“libNAME.a”。lm => libm.a;
  • I 指定头文件搜索路径
  • L 库搜索路径
  • static 使用静态库
  • ansi禁止那些与 ANSI/ISO 标准冲突的 GNU 扩展特性。在使用 GNU C 库(glibc) 的系统上,该选项也禁止了对 C 标准库的扩展。
  • std 指定标准, c89,c99,gnu99,gnu89
  • W常见潜在编程错误,建议开发时使用

预处理

  • D -DNAME选项在命令行上定义预处理宏 NAME
  • E 预处理源文件

调试

  • g 存储额外的调试信息

优化

  • O0 或者无-O选项: 无优化
  • O1或者O: 不需要任何速度-空间折衷的最常见形式的优化
  • O2、03:更近异步优化

平台相关

  • march=CPU, 速度快,不可移植。–march=pentium4

动态链接

一个与共享库链接的可执行文件仅仅包含它用到的函数相关的一个表格,而不是外部函数所在的 对象文件的整个机器码。在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的 该共享库中复制到内存中----这个过程被称作动态链接

变量

  • LD_LIBRARY_PATH 动态库查找路径
  • C_INCLUDE_PATH 头文件查找路径
  • LIBRARY_PATH 静态查找路径

Nginx源码分析
研读nginx源码

一群热爱代码的人 研究Nginx PHP Redis Memcache Beanstalk 等源码 以及一群热爱前端的人

7.1k 声望
12.7k 粉丝
0 条评论
推荐阅读
【转发】来自西红柿(李乐)的《深入理解Go语言
作者:李乐 原文地址:[链接]第一章 Go语言快速入门  第一篇 基本语法  第二讲 数组与切片  第三讲 字符串  第四讲 哈希表MAP  第五讲 结构体与接口 &em...

LNMPRG源码研究1阅读 1k

C 程序眼中的 Unicode
去年写了一篇文章「在 C 程序中处理 UTF-8 字符串」,介绍了如何使用 GLib 提供的 UTF-8 字符串处理函数来实现基本的 UTF-8 文本处理。不过,GLib 是一个功能比较全面的 C 程序库,C 字符串处理仅仅是它的一个很...

garfileo3阅读 5.8k评论 5

滚蛋吧,正则表达式!
你是不是也有这样的操作,比如你需要使用「电子邮箱正则表达式」,首先想到的就是直接百度上搜索一个,然后采用 CV 大法神奇地接入到你的代码中?

良许3阅读 1.5k

程序员适合创业吗?
大家好,我是良许。从去年 12 月开始,我已经在视频号、抖音等主流视频平台上连续更新视频到现在,并得到了不错的评价。每个视频都花了很多时间精力用心制作,欢迎大家关注哦~考虑到有些小伙伴没有看过我的视频,...

良许3阅读 1.3k

计算机如何表示整数
在计算机中,任何的数据都是用二进制: 0 和 1 来表示。整数也不例外。生活中的 10,在 8 个字节的整数中表示为 00001010。但是这样子只能表示正数和零。怎么表示负数呢?于是有了符号位的概念。在 8 个字节的整...

kang2阅读 3.2k评论 7

C语言获取服务器mac地址
它的信息保存在结构体struct ifconf中,有可能不止一个。获取到的信息保存在ifc_buf中。第二个逻辑就是根据网卡的名字去获取mac地址,主要用下面的函数完成:

禹鼎侯阅读 3.3k

比cat更好用的命令!
但 cat 命令两个很重大的缺陷:1. 不能语法高亮输出;2. 文本太长的话无法翻页输出。正是这两个不足,使得 cat 只能用来查看行数不多的小文件。

良许2阅读 659

一群热爱代码的人 研究Nginx PHP Redis Memcache Beanstalk 等源码 以及一群热爱前端的人

7.1k 声望
12.7k 粉丝
宣传栏