C++语言零基础入门教程:3.2 C++手动编译代码,手动使用编译器编译代码

8690 人浏览 | 时间: 2015-10-11 18:33:42 | 作者: codexia 会员文章,禁止转载

    在上一节课《C++语言零基础入门教程:3.1 程序生成过程:用什么写代码,用什么开发软件》中,我们介绍了写代码要的工具的相关知识。我们现在都是用IDE来开发软件写代码的,那么本节就来讲讲编译代码这部分的内容,同时实战讲解写代码这些事情。
    虽然我们现在都在用IDE来开发,也非常方便。不过,本节课要给你介绍手动来编译代码的知识。了解这个可以让你对于程序生成过程理解更加深刻。不过,我们只是初步的学习,你一定要动手试试。会了就行了,暂时不需要深入研究编译器之类的。作为初学入门,还不需要。初学者也不要在这里浪费时间,等有一定水平了再研究也不迟。我们是课程需要,让你们在实践中深入理解,而不是理论上的讲出这个知识。
    那么我们这里就用VS2015使用的编译器。VS2015只是微软开发的一款IDE而已,VS2015内部会用一个微软开发的编译器。我们这里使用的就是VS2015内部使用的VC++编译器。如果你安装的不是VS2015,你可以安装一个,或者你直接用你安装的VS的编译器即可。VS2015的可以在C++技术网里下载,我就是用的网站提供的这个版本。前去下载:点此下载VS2015正式版,我们只需要下载社区版就行了,这个免费。
    安装完后,在安装目录下可以找到内部使用的编译器等。我的VS2015安装在【D:\Program Files (x86)\】下,所以VS2015的VC++部分的内部程序文件在【D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin】文件夹下。我按照类型分组,如下图所示:

   
    在图中你可以看到一系列的exe文件,这些都是VS2015内部需要执行的程序哦,在VS2015界面上的编译,链接,都会调用这些程序的相应的exe哦。我们下面就来自己实现这个过程。
    图中的cl.exe文件就是VC++编译器程序文件哦。其他的在讲到的时候我们会解释,你想知道也可以百度哦。
    我们手动来编译程序,都是在控制台DOS窗口中完成的哦。所以,你应该知道下一步怎么做了哦。那就是打开DOS窗口哦。然后执行命令等等。是的,等等。还有一个问题,还没有写代码呢!
    好的,我们先来写一段简单的测试代码。上节课了解到,我们的代码文件是cpp为扩展名的文本文件。因为我们要手动的编译,自然就不用IDE了哦。我们用记事本来写代码咯。
    我在记事本中写下面一段代码:

#include <iostream>
using namespace std;
void main()
{
    cout<<"这是我用手动编译生成的程序哦";
    // - 下面两句代码,防止运行后马上结束
    int i;
    cin>>i;
}
     写好这段代码后,然后保存为m.cpp文件。注意在保存文件时,选择所有文件,然后给文件命名m.cpp哦。不然以文本文件保存的就是txt文件哦。很多初学者这个细节搞不清楚哦。特意在这里说一下,看看我的截图:
   
    本来说保存在C盘的,Win10系统不让我保存,说要管理员权限,就懒得去处理了,就换到D盘了。看来Win10对安全确实做了不少工作呀。
    好了,代码写好了,我们将cpp代码文件编译一下吧。
    我们来启动DOS命令窗口。【Windows键+R】同时按下即可启动运行窗口,我们输入cmd,如下图所示:
   
    回车确定,弹出DOS窗口了。界面如下,不过初始的路径是:C:\User\wdx,这个路径不是我们要执行的编译器程序的路径,所以要切换一下。前面我们已经找到了编译器所在的路径。如果这个路径和当前的路径在同一个盘下,这里就是C盘,我们就不用切换盘符。否则需要先切换一下盘符。切换盘符只需要在后面输入盘符加冒号,如【D:】回车后即可切换了。我们的刚好就是将VS2015安装在D盘,所以就输入切换了一下,如下图所示:
   
   现在已经在D盘了,然后我们将当前的目录转到编译器所在的目录,使用cd命令来执行。只需要在cd后面加个空格,然后加上当前盘符下的绝对路径即可。如果在非Win10系统下,你可以复制那个路径,然后在DOS中右击粘贴即可,不需要一个个打字。这个不能用快捷键Ctrl+V,在Win10中,可以使用Ctrl+V和右击粘贴完成。粘贴后,如下图所示:
   
    回车即可。切换过来的界面如下:
   
    好了,我们就可以在这个目录下执行VS2015内部的编译器了。其他的IDE类似。
    我们在当前路径下输入:
cl D:/m.cpp
     这个命令就是启动编译器程序执行的命令,实际上就是在当前目录下调用了cl.exe程序文件哦。后面的文件,就是传给编译器程序cl.exe的参数哦。这样编译器就会去读取这个文件,然后编译生成对应的文件。好了,那我们回车,看看编译出什么结果呢?
    回车后发现报错了,错误提示:
D:/m.cpp(1):fatal error C1034: iostream: 不包括路径集
     出现这个错误,表明问题出在头文件iostream咯。问题出现了我们应该理性的去找解决问题的办法。而不是盲目的恐惧,然后就抱怨这么多问题。实际上,问题多了,学到的东西就多了。你可以百度这个问题呢,会找到答案的,但是你一定要沉下心研究,否则就算找到答案,你也看不懂。
    那么这个问题说的是找不到这个iostream头文件。我们它提示的是路径集呢?因为头文件你中有我,有层叠包含关系,所以,就是一系列的头文件哦。你可能想到直接将iostream头文件的绝对路径写出来,不用让编译器去搜索,这样不就解决了头文件找不到的问题。
    但是你这个是解决了iostream头文件找不到的问题,然而,iostream头文件包含的其他文件呢?这样的话,你就没招了。你总不能去修改iostream头文件吧。这个是不能修改的,不然一旦出问题,那就是灾难性的问题,这个VS写其他C/C++代码包含这个头文件就会出错哦。
    所以这一招无法解决问题。你能积极的解决问题,那就是学习能力的一个提升。好了,那么我们要的就是将所有的路径都告诉编译器,让他自己去找。我们就只需要给出一个头文件名即可。然而我们如何去告诉编译器这些文件所在的路径呢。这些文件的所有路径合起来就是上面提示的路径集咯。
    VS编译程序的时候,自然也会有这个问题,所以,微软早已提供好了一个批处理文件,执行后,就会告诉编译器这些路径集了。
    这个批处理文件名称为【VsDevCmd.bat】,在安装目录的【D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools】下,你就找你的安装目录的Common7的Tools文件夹就可以了。
    那么我们就在DOS运行一下这个批处理文件即可,然后再编译就行了。我们要么先在DOS将当前目录用cd转换到批处理文件的目录,或者直接输入文件的绝对路径和文件名即可,如【D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat】,但是因为路径有空格,在DOS中无法完成。所以还可以使用相对路径,【.】表示当前路径,【..】表示上一级路径,这样可以输入文件的路径,如下图所示:
   
    回车执行完后,就设定好了路径集。你也可以先切换DOS当前目录,然后只需要输入批处理器名字即可。如下图所示:
  
    执行要点时间,等一会,等再次出现当前路径的提示时,可以输入命令时,表示上一条执行成功。
    我们将DOS当前目录切换到D盘下,输入【cd ..】不停的退回上一级目录,然后知道D:\为止。
    现在再来编译一下代码。输入【cl m.cpp】,因为当前的DOS目录就在D盘了,也就是和cpp同一个目录,所以只需要子啊cl后面输入文件名即可。然后回车,然后执行成功了,提示如下图所示:
   
    由图中可以看到,【/out:m.exe】表示生成了exe文件,m.obj表示生成了obj文件。我们看看D盘里的文件,多了m.exe和m.obj文件。如下图所示:
   
    运行一下m.exe,如下图所示:
   
    我们说好的是编译,怎么直接就生成了exe呢?cl.exe编译器程序默认是会编译后链接生成exe。所以在命令中加入参数/c就可以只编译,不链接了。编译后,只会生成obj的中间二进制代码文件。输入的命令如下:
cl /c m.cpp
     编译就是将我们写的字符的文本文件按照C++的语法规则翻译成对应的二进制的格式的代码,这个代码就可以在计算机内部直接执行,因为计算机只懂二进制。
    以上是所有完整而详细的过程,请你一定要自己动手试试。而这个过程,在VS中,我们使用相应的编译按钮就可以自动完成。这也让我们看到了手动编译是多么麻烦,看到IDE是多么方便快捷。
当前文章为会员文章,请前往[用户中心]开通会员后继续阅读。