用法:g++[选项]文件...

  1. g++编译流程:

  1. main.cxx
  2. #include <iostream>
  3. using namespace std;
  4. int main(void)
  5. {
  6. cout<<"Hello World!"<<endl;
  7. return 0;
  8. }
main.cxx
#include <iostream>

using namespace std;

int main(void)
{
        cout<<"Hello World!"<<endl;
        return 0;
}

① g++ -E仅作预处理,不进行编译、汇编和链接

如果你想查看某一个文件的预处理过程,可以

Administrator@72cec870236147e/home/liujl/mytest

$g++ -E main.cxx

这样会直接在terminal中显示预处理过程,如果main.cxx中包含include,例如#include<iostream>,只能看到部分预处理结果;这个只显示预处理,不生成文件;如果你想查看详细的预处理,可以重定向到一个文件中,如:

Administrator@72cec870236147e/home/liujl/mytest

$g++ -E main.cxx -o main.i

这样你可以查看main.i中显示的内容,里面会有类似:

#1 "/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/stringfwd.h"1 3

可以参考官方预处理输出文档:

http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

或者

http://stackoverflow.com/questions/15679756/g-e-option-output

②g++ -s
编译到汇编语言,不进行汇编和链接,即只激活预处理和编译,生成汇编语言

Administrator@72cec870236147e/home/liujl/mytest

$g++ -s main.i -o main.s

③g++ -c
编译、汇编到目标代码,不进行链接,即生成目标文件(.o)

Administrator@72cec870236147e/home/liujl/mytest

$g++ -c main.s -o main.o

会生成一个main.o的目标文件

④g++ -o
生成链接文件

Administrator@72cec870236147e/home/liujl/mytest

$g++ main.o printf1.o printf2.o -o main

(注意,如果各个文件有依赖关系,在生成链接文件之前步骤每个文件单独操作都没有问题,但是在链接的时候会考虑依赖关系,所以上面语句把main中的依赖添加上面了)

⑤./main
执行

这是最后一步了,执行-o后面的文件,如果没有-o,系统会默认生成一个a.out文件(执行./a.out)。

2、g++关键参数介绍

上文在g++编译过程中已经介绍过-E、-S、-c、-o,再简单介绍-x和-M

①-x <语言>
指定其后输入文件的语言

允许的语言包括:cc++
assembler none

‘none’意味着恢复默认行为,即根据文件的扩展名猜测源文件的语言

Administrator@72cec870236147e/home/liujl/mytest

$g++ -x
c main.cxx

main.cxx:1:20:致命错误:iostream:Nosuch
file or directory

编译中断。

用c语言编译main.cxx,由于main.cxx中有#include<iostream>,是c语言中没有的,所以会报错误

Administrator@72cec870236147e/home/liujl/mytest

$g++ -x
c++ main.cxx,编译就没问题。

②g++ -M main.cxx
生成文件关联信息。包含目标文件所依赖的所有源代码。

Administrator@72cec870236147e/home/liujl/mytest

$g++ -M main.cxx

main1.o:main1.cxx /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/iostream \

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/i686-pc-cygwin/bits/c++config.h\

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/i686-pc-cygwin/bits/os_defines.h\

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/i686-pc-cygwin/bits/cpu_defines.h\

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ostream \

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ios \

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/iosfwd \

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/stringfwd.h \

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/postypes.h \

/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/cwchar \

g++基本用法的更多相关文章

  1. .replace(/-/g,"/")的用法

    /-/g正则表达式   g  代表  global    全部替换 var str1 ="2012-08-12 23:13"; str1 = str1.replace(/-/g,& ...

  2. js正则标志/g /i /m的用法,以及实例

    js正则标志/g /i /m的用法,以及实例   正则的思想都是一样的,但是具体的写法会有所不同,在这里提到的/g,/i,/m在其他的地方也许就不能用了. 一,js正则标志/g,/i,/m说明 1,/ ...

  3. 关于正则表达式中参数/g /m的详细分析和例子详解

    总结1:参数/g的用法 表达式加上参数g之后,表明可以进行全局匹配,注意这里"可以"的含义.我们详细叙述: 1)对于表达式对象的exec方法,不加入g,则只返回第一个匹配,无论执行 ...

  4. 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?

    解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结 ...

  5. 正则表达式中/g的含义

    关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”   为了解答“正则表达式(/[^0-9]/g,'')中的" ...

  6. ES6.0 Generator 三种用法

    // Generator start ------- thunk 用法 const Thunk = function(fn) { return function (...args) { return ...

  7. 正则表达式中模式修正符作用详解(i、g、m、s、x、e)

    下面的转:http://www.cnblogs.com/shunyao8210/archive/2008/11/13/1332591.html 总结1:附件参数g的用法 表达式加上参数g之后,表明可以 ...

  8. Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake

    前言 编译器的主要工作流程: 源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler)>> 汇编程序(Assembl ...

  9. 【C/C++】Linux的gcc和g++的区别

    Windows中我们常用vs来编译编写好的C和C++代码:vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢,其实Linux下这样的工具有很多 ...

随机推荐

  1. JAVA多线程之先行发生原则

    一.引子 如果java内存模型中所有的有序性都仅仅依靠volatile和synchronized来完成,那么有一些操作会变得很繁琐,但我们在编写java并发代码时并未感觉到这一点,这是因为java语言 ...

  2. POJ 2065 SETI [高斯消元同余]

    题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...

  3. 初探solr搜索

    solr是一个基于lucene的搜索引擎,lucene是一个全文检索引擎的架构.solr在此之上进行了封装完善,变成了一个很流行实用的搜索引擎,可以应对绝大部分的搜索需求.使用搜索引擎有以下几点好处: ...

  4. tcp_sync_server and tcp_sync_client

    #include <iostream> #include <fstream> #include <sstream> #include <boost/asio. ...

  5. iptables snat和dnat

    iptables中的snat和dnat是非常有用的,感觉他们二个比较特别,所以单独拿出来说一下. dnat是用来做目的网络地址转换的,就是重写包的目的IP地址.如果一个包被匹配了,那么和它属于同一个流 ...

  6. 3、flask之基于DBUtils实现数据库连接池、本地线程、上下文

    本篇导航: 数据库连接池 本地线程 上下文管理 面向对象部分知识点解析 1.子类继承父类__init__的三种方式 class Dog(Animal): #子类 派生类 def __init__(se ...

  7. STAThread 和 MTAThread

    STAThread:single threaded apartment 直译过来是:单线程单元套间 MTAThread:multiple threaded apartment 直译过来是:多线程单元套 ...

  8. 真实场景的双目立体匹配(stereo matching)以及虚拟视点合成(virtual view synthsis)示例

    双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左.右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图.而深度图的应用范围非常广泛,由于其能够记录场景中物体距离摄像机的距离,可 ...

  9. Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  10. 配置nginx服务器 —— Nginx添加多个二级子域名

    1.安装nginx centos/linux下的安装Nginx 2.安装好后进入Nginx目录中 在conf目录下建立一个vhost(ps:名字自己设定)文件夹 其中的$NGINXHOME为你的ngi ...