参数详解
无选项编译链接
    将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
    例子用法:
    gcc test.c

无选项链接
    gcc test.o -o test
    将编译输出文件test.o链接成最终可执行文件test。

-x language filename  
  设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。  
  可以使用的参数吗有下面的这些  
  `c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp'.  
  看到英文,应该可以理解的。  
  例子用法:  
  gcc -x c hello.pig  
 
-x none filename  
  关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型  
  例子用法:  
  gcc -x c hello.pig -x none hello2.c  
 
-c  
  只激活预处理,编译,和汇编,也就是他只把程序做成obj文件  
  例子用法:  
  gcc -c hello.c  
  他将生成.o的obj文件
      gcc -c test.s
      将汇编输出文件test.s编译输出test.o文件。

-S  
  只激活预处理和编译,就是指把文件编译成为汇编代码。  
  例子用法:  
  gcc -S hello.c  
  他将生成.s的汇编代码,你可以用文本编辑器察看
      gcc -S test.i  
      将预处理输出文件test.i汇编成test.s文件

-E  
  只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.  
  例子用法: 
  gcc -E hello.c >; pianoapan.txt  
  gcc -E hello.c | more  
  慢慢看吧,一个hello word 也要与处理成800行的代码
     gcc -E test.c -o test.i

-o  
  制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它,哈哈  
  例子用法:  
  gcc -o hello.exe hello.c (哦,windows用习惯了)  
  gcc -o hello.asm -S hello.c

-pipe  
  使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题  
  gcc -pipe -o hello.exe hello.c

-ansi  
  关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏,

-fno-asm  
  此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。       
-fno-strict-prototype  
  只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.  
  而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型  
 
-fthis-is-varialble  
  就是向传统c++看齐,可以使用this当一般变量使用.  
 
-fcond-mismatch  
  允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型  
 
-funsigned-char  
-fno-signed-char  
-fsigned-char  
-fno-unsigned-char  
  这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参数)或者 signed char(后两个参数)  
 
-include file  
  包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include<filename>;  
  例子用法:  
  gcc hello.c -include /root/pianopan.h  
 
-imacros file  
  将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中  
 
-Dmacro 
    以字符串“1”定义 MACRO 宏 
  相当于C语言中的#define macro  
 
-Dmacro=defn
    以字符串“DEFN”定义 MACRO 宏  
  相当于C语言中的#define macro defn  
  
-Umacro 
    取消对 MACRO 宏的定义 
  相当于C语言中的#undef macro

-undef  
  取消对任何非标准宏的定义  
 
-Idir  
  在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他  
  回先在你所制定的目录查找,然后再按常规的顺序去找.  
  对于#include<file>;,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找  
 
-I-  
  就是取消前一个参数的功能,所以一般在-Idir之后使用  
 
-idirafter dir  
  在-I的目录里面查找失败,讲到这个目录里面查找.  
 
-iprefix prefix  
-iwithprefix dir  
  一般一起使用,当-I的目录查找失败,会到prefix+dir下查找  
 
-nostdinc  
  使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置  
 
-nostdin C++  
  规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg++库使用  
 
-C  
  在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的  
 
-M  
  生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。  
 
-MM  
  和上面的那个一样,但是它将忽略由#include<file>;造成的依赖关系。  
 
-MD  
  和-M相同,但是输出将导入到.d的文件里面  
 
-MMD  
  和-MM相同,但是输出将导入到.d的文件里面  
 
-Wa,option  
  此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序  
 
-Wl.option  
  此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.

-llibrary  
  制定编译的时候使用的库  
  例子用法  
  gcc -lcurses hello.c  
  使用ncurses库编译程序  
 
-Ldir  
  制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然  
  编译器将只在标准库的目录找。这个dir就是目录的名称。  
 
-O0  
-O1  
-O2  
-O3  
  编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
    例子用法: 
    gcc -O1 test.c -o test
    使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长
 
-g  
  只是编译器,在编译的时候,产生调试信息。  
 
-gstabs  
  此选项以stabs格式声称调试信息,但是不包括gdb调试信息.  
 
-gstabs+  
  此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.  
 
-ggdb  
  此选项将尽可能的生成gdb的可以使用的调试信息.

-static  
  此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么  
动态连接库,就可以运行.

-share  
  此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-traditional  
  试图让编译器支持传统的C语言特性 
 
-IDIRECTORY 
    指定额外的头文件搜索路径DIRECTORY

-LDIRECTORY 
    指定额外的函数库搜索路径DIRECTORY
  
-lLIBRARY 
    连接时搜索指定的函数库LIBRARY

-m486
    针对 486 进行代码优化

-shared 
    生成共享目标文件。通常用在建立共享库时

-static
    禁止使用共享连接
  
-w 
    不生成任何警告信息
  
-Wall

生成所有警告信息

-save-temps
    一次获得全部的中文输出文件,正常的进行编译连接,.i、.s、.o为后缀,文件名相同

-fsyntax-only
    不会执行预处理、编译、汇编、连接,只会测试输入文件的语法是否正确
   
-std
    指定C方言,如:-std=c99,gcc默认的方言是GNU C

learning gcc args的更多相关文章

  1. learning shell args handing key=value example (2)

    Shell args handing key=value example [Purpose]        Learning how to handing ker=value args   [Eevi ...

  2. learning gcc #pragma once

    referenc: https://zh.wikipedia.org/wiki/Pragma_once 在C和C++编程语言中,#pragma once是一个非标准但是被广泛支持的前置处理符号, 会让 ...

  3. learning gcc __BEGIN_DECLS and __END_DECLS

    __BEGIN_DECLS and  __END_DECLS  be use for mix C and C++

  4. 『TensorFlow』SSD源码学习_其八:网络训练

    Fork版本项目地址:SSD 作者使用了分布式训练的写法,这使得训练部分代码异常臃肿,我给出了部分注释.我对于多机分布式并不很熟,而且不是重点,所以不过多介绍,简单的给出一点训练中作者的优化手段,包含 ...

  5. Visual Studio Code 构建C/C++开发环境

    转自: https://blog.csdn.net/lidong_12664196/article/details/68928136#visual-sutdio-code%E4%BB%A5%E5%8F ...

  6. vscode编辑器配置C语言编译运行环境

    1.安装C/C++插件 2.安装编译环境,这里选择MinGW(http://mingw.org/ ) 选择一个安装目录,如:E:\workspace\MinGW mingw32-gcc开头的(包括了m ...

  7. VScode 插件推荐与C/C++配置

    以下是我经常用到的VScode插件.由于插件本身具有详细的配置和介绍,不对插件本身的安装配置进行说明,仅仅支出这些插件的主要功能.具体使用强烈推荐看一下安装插件后的说明,大多数的问题和设置都可以找到, ...

  8. tensorflow中的学习率调整策略

    通常为了模型能更好的收敛,随着训练的进行,希望能够减小学习率,以使得模型能够更好地收敛,找到loss最低的那个点. tensorflow中提供了多种学习率的调整方式.在https://www.tens ...

  9. 深入理解JVM虚拟机(二):JDK 内存类的异常分析

    JVM数据存储 堆存储(Heap):对象存储,实际上就是JAVA的数据存储 方法堆栈(Method Stack):存储方法调用的关系. 永久代(Perm):在JDK1.6及之前,常量数据存储于此区域 ...

随机推荐

  1. VCS

    timing check相关的, +notimingcheck命令,可以用在compile时,也可以用在run time的时候, 都是将检查timing的系统函数,都disable掉了, 加在comp ...

  2. Sitecore中Core,Master和Web数据库之间的区别

    Core数据库 正如名称所示,Core Database是Sitecore应用程序的主干,它可用于多种用途. 核心数据库包含所有Sitecore设置. 它包含桌面模式,内容编辑器,页面编辑器等的定义. ...

  3. 即时通讯(III)

    即时通讯的开源库 目前及时通讯可以使用环信.柔云.腾讯云,这些都是基于TCP连接的,UI也是高度定制的,而且它们的技术也是比较成熟的. XMPP比较早,是开源的,但是坑也比较多.传输的数据是XML,造 ...

  4. 知识点补充 set 深浅拷贝

    一 对前面知识点的补充 1.str中的join()方法是将列表转换成字符串 lst = ["韩雪","赵丽颖","黄渤","李连杰 ...

  5. WIFI CAT ET III Adapter Caterpillar ET3 New Arrival

    The old bluetooth cat et adatper iii has stopped production, and you can get the new WIFI CAT Caterp ...

  6. java之代码复用

    1.通用查询修改方法 2.通用查询修改方法接口

  7. BIOS备忘录之IIC(touchpad)设备

    简述BIOS中对IIC device的支持,以touchpad为例. 信息收集 收集平台的硬件信息: 1. IIC controller number(PCH一般包含多个controller,我们使用 ...

  8. Yii1打印当前请求所有执行的SQL及耗时

    我们在熟悉新的项目了解业务的时候,可以有很多方式.看项目文档说明:和了解项目身边的人沟通:通过自己度代码调试,但是一步步调试打印语句或许有点慢,如果可以调出当前请求的所有语句,那么很快可以熟悉他的业务 ...

  9. 11个简单的Java性能调优技巧,傻瓜都能学会!

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情. ...

  10. 安装GDB-ImageWatch ,在QT中查看图像

    GDB_ImageWatch是在Linux下基于QT编写图像处理程序的调试程序. 由于并非像ImageWatch一样由官方提供,而是在github上以代码的方式进行提供,我们在使用的时候需要自己编译, ...