分享

linux 下g++/gcc编译简介

 Tech-d 2013-03-19
  • -x language filename:设定编译所用的语言。通常编译时没有这个选项就会按照文件后缀名来判断,有这个选项则会强制使用某种语言来编译。
选项有:c, objective-c, c-header, c++, cpp-output, assembler, 以及 assembler-with-cpp
e.g. 
gcc -x c hello.pig
特殊用法:
-x none filename:关掉上一个-x选项,
e.g. 
gcc -x c hello.pig -x none hello2.c

  • -c filename:只激活预处理,编译和汇编,也就是只把文件编译成obj。
e.g.
gcc -c hello.c
将只会生成hello.o

  • -S filename:只激活预处理和编译,即只把文件变成汇编代码。
e.g.
gcc -S hello.c
将只会生成hello.s格式的 汇编代码,可以用文本编辑器查看。

  • -E filename > output file:只激活预处理,不主动生成文件,需要手动输出。
e.g.
gcc -E hello.c > hello.txt
gcc -E hello.c | more

  • -o output_filename:制定生成文件名。
e.g.
gcc -o hello.so hello.c

  • -pipe:用管道代替编译过程中生成的临时文件。在使用非gnu汇编工具时,这个命令可能导致问题。
e.g.
gcc -pipe -o hello.so hello.c

  • -include file:包含某个文件中没有包含,但是编译时需要用到的文件,其实就跟#include <...>是一样的,只不过是写在了编译命令行中
e.g.
gcc hello.c -include /root/hello.h

  • -I[dir]: 对于被编译文件中的#include "...",优先在dir中查找;如果没找到,才会回到default目录中去查找
-I-:取消上一个命令的功能,所以这个flag通常接在-Idir后使用;

  • -C:在预处理时,不删除主食信息,通常和-E一起用于分析程序

  • -M:生成文件关联信息,包含目标文件依赖的所有源代码。
-MD:和-M相同,只是将信息输出到一个.d文件中
-MM:和-M相同,但是它将忽略由#include造成的依赖关系。
-MMD:和-MM相同,只是将信息输出到一个.d文件中

  • -Wa,options:传递options给汇编程序,options之间用逗号分隔
-Wl,options:传递options给连接程序,options之间用逗号分隔

  • -l[library_name]:制定编译时用到的库文件。
  • -L[dir]:制定编译时搜索库的路径。否则编译器将只在标准库路径中查找

  • -O0/-O1/-O2/-O3:编译器的四个优化级别,O0无优化,O3优化级别最高

  • -g:指示编译器在编译过程中产生调试信息

  • -static:禁止使用动态链接库,所以编译出来的结果都很大,但不需要动态链接库就可以直接运行。
-shared:尽量调用动态链接库,所以编译出来的文件比较小,但需要从系统中调用各种动态链接库。

-fpic:编译器就生成位置无关目标码,适用于-static
-fPIC:编译器就输出位置无关目标码,适用于-shared

  • -m64/-m32:设置编译环境为64位或32位。
  • -Wall:允许编译过程中发出能够提供的所有警告
















    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多