剖析VC编译器及nmake.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
剖析VC编译器及nmake

剖析VC编译器及nmake Longlongago sunxuechen 第一节 当你看透了它华丽的外壳,你就真正拥有了它! MyEclipse是开发java应用程序的一个非常好用的IDE,如同VC是c++的友好开发环境一样,最近看了一下java中ant,感觉以前都没有想过编译的顺序需要自己指定。 以前使用vc的话也只是有系统提供默认的编译顺序,有的时候真的不愿意去揭穿它背后的秘密,因为我怕接受不了华丽外壳后晦涩的本质。 由于一开始学习c++时候就是使用VC的IDE,导致只是学习到了c++的语法,对构建大型c++应用程序只是靠VC提供的编译环境,而丝毫没有想到中间的透明化处理,所以本质上来说,确实是学习了VC而不是学习了c++。 下面就从MakeFile谈起,来慢慢的深入了解一下真正的c++。 有用的路径: E:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin 其中包括了一些动态链接库,有很多时候都需要被加载。 VC安装后的目录结构图 Common文件夹下应该是存放的Microsoft Visual Studio 公共资源,包括VB等均可使用。 VC98 文件夹下应该就是对应VC IDE 的一些资源。 下面我们要动手脚的地方就是VC98下的Bin目录,其中有一个很好的东西,就是cl.exe 平时我们运行VC时候经常出现cl.exe,这无疑是晴天霹雳,因为一般这种问题在新手看来都是很棘手的,就算是你接触VC有一段时间,也很难说你知道它的具体原因。 cl.exe : compile-link executor ,我的理解是这样的。 然后我们就近距离接触一下cl.exe 首先,准备一份见面礼,如下 #includestdio.h void main() { printf(Hello CL !); } 然后,将其拷贝到目录 E:\Program Files\Microsoft Visual Studio\VC98\Bin下,因为这样比较方便,有很多dll文件都在其下,而且最关键的是,它有一个环境变量注册文件:VCVARS32.BAT。 进入cmd,然后进入E:\Program Files\Microsoft Visual Studio\VC98\Bin,然后执行VCVARS32.bat,这样就注册好了编译器cl所要使用的环境变量,之后输入 这样,编译结束,你会得到一个test.obj和test.exe文件,然后你可以执行这个test.exe文件。 就算现在这样,我还是感觉受益匪浅,好像以前曾经尝试过使用cl,但是还是没有付诸实施,今天终于得见庐山真面目,还是感慨万千啊。 第二节 当你认为你拥有了它,其实你远远没有。 物以类聚,我们既然知道了有个cl,必然要知道有什么和它放在一起,他们又有什么作用,那么就让我们来看看E:\Program Files\Microsoft Visual Studio\VC98\Bin下还有什么好东东吧~ 我们只关注可执行文件,如下 看看吧,1998年,是不是相见很晚啊! 然后,我们看到有个DUMPBIN,这个是经常用来查看二进制文件的,比如DLL,他可以告诉你DLL中有哪些函数,功能和TOOLs中的DEPENDS差不多。 另外,还有一个Editbin,看起来向修改二进制数据的,但是我还没试验成功~有错误~ 还有就是link,这个一看就知道是连接用的,你可以直接使用link test.obj去产生test.exe,我试过了,绝对没错。 既然这样,就一定有个compile把,因为cl是compile和link的缩写嘛,而且一般的步骤都是这样的,首先是编译然后连接,到底是哪个文件呢,我确实没找到~ 不得不引用一篇网上一篇很有思想的文章: 首先简单介绍一下程序是如何编译链接的。程序写好之后,我们进行编译和链接来产生可执行程序。这时候,编译器为了完成编译和链接,需要知道很多信息。比如要编译的文件是哪一个,使用哪些编译选项进行编译,编译好之后输出到哪里,输出文件叫什么名字等等。makefile 就是被vc使用保存这些信息的方法之一,编译时程序nmake根据makefile中的信息,在用相应选项执行编译,用相应执行链接,最后生成可执行文件。vc的编译程序是CL.EXE,链接程序是LINK.EXE。关于本文所提到的vc编译链接用的程序都在 目录 ...Microsoft Visual StudioVC98Bin 下。 整个过程如下。 在我看这个console程序的makefile的时候,突然怀疑vc6中,console,sdk,mfc等的编译也是通过执行外部的 nmake.exe来完成的。如果真是

文档评论(0)

xjj2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档