VC6工程下的文件类型和编译选项[ZT]

1.VC6工程常用文件
//////////////////////////////////////////////////////////////
.opt 工程关于开发环境的参数文件。如工具条位置等信息.
.aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他.
.clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候绘提示你是否重建.
.dsp (DeveloperStudio Project)项目文件,文本格式,不过不熟悉的话不要手工修改.
.dsw (DeveloperStudio Workspace)是工作区文件,其他特点和DSP差不多.
.plg 是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大.
在Tools->Options里面有个选项可以控制这个文件的生成.
.hpj (Help Project)是生成帮助文件的工程,用microsfot Help Compiler可以处理.
.mdp (Microsoft DevStudio Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式.
.bsc 是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件.如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,可以加快编译速度.
.map 是执行文件的映像信息纪录文件,除非对系统底层非常熟悉,这个文件一般用不着.
.pch (Pre-Compiled File)是预编译文件,可以加快编译速度,但是文件非常大.
.pdb (Program Database)记录了程序有关的一些数据和调试信息,在调试的时候可能有用.
.exp 只有在编译DLL的时候才会生成,记录了DLL文件中的一些信息.一般也没什么用.
.ncb 无编译浏览文件(no compile browser).当自动完成功能出问题时可以删除此文件.build后会自动生成.


2.MFC工程文件
//////////////////////////////////////////////////
当我们用Application Wizard生成一个新的项目时,MFC会自动为我们产生不少的程序文件,那么这些文件都是干什么用的呢?其实生成项目完成之后,我们会在项目目录里面发现一个readme.txt文件,项目所生成的程序文件在这里都有介绍,不过一般都是英文的。Application Wizard产生项目的同时,也展现了MFC机制为我们打下的程序框架,更为我们提供了用以扩展的程序。依据不同的选项,产生的文件也有所不同,以下是Application Wizard产生的标准程序文件(假设项目名称为ExMFC),大致可以分为以下几类:
· 工作区文件、项目文件和make文件
· 应用程序源文件和头文件
· 资源文件
· 预编译头文件
· 按可选项增加的AppWizard文件

工作区、项目文件和make文件
ExMFC.dsp — 这是MFC生成的项目文件,它包含当前项目的设置、所包含的文件等信息。
ExMFC.dsw — 这是MFC自动生成的工作区文件,它包含当前工作区所包含的项目的信息。
ExMFC.MAK — 这是MFC项目的项目文件,这也是与NMAKE兼容的文件。如果选择了External make文件可选项,则可人工对它编辑,
但不能利用Visual C++许多项目编辑特性。
ExMFC.clw — 这个文件含有被ClassWizard用来编辑现有类或增加新类的信息。ClassWizard还用这个文件来保存创建和编辑消息映射和
对话框数据所需的信息,或是创建虚拟成员函数所需的信息。

应用程序源文件和头文件
ExMFC.h — 这是应用程序的主头文件,它含有所有全局符号和用于包含其它头文件的#include伪指令。
ExMFC.cpp — 这个文件是应用程序的主源文件。它将创建CExMFCApp类的一个对象(从CWinApp派生),并覆盖InitInstance成员函数。
MainFrm.h,MainFrm.cpp — 这两个文件将从CFrameWnd(SDI应用程序)或CMDIFrameWnd(MDI应用程序)派生CMainFrame类。
如果在 AppWizard的Application Options页(6步中的第4步)中选择了对应的可选项的话,CMainFrame类将处理工具条按钮和状态条的创建。MAINFRM.CPP文件还含有MFC应用程序提供的默认工具条按钮的对象ID——叫做buttons数组。
ExMFCDoc.h,ExMFCDoc.cpp — 这些文件从CDocument类派生并实现名为CExMFCDoc的文档类,并含有用于初始化文档、
串行化(保存和装入)文档和用于调试诊断的一些成员函数的框架。
ExMFCView.h,ExMFCView.cpp — 这些文件派生并实现名为CExMFCView的视类,用于显示和打印文档数据。
CHelloView类是从CView或它的派生类派生出来的,含有绘制视和用于调试诊断的一些成员函数框架。

资源文件
ExMFC.rc, Resource.h, ExMFC.rc2 —这是项目的头文件及其资源文件。资源文件含有一般MFC应用程序的默认菜单定义和加速键表、
字符串表。它还指定了缺省的About对话框和一个图标文件(res\ExMFC.ico)。资源文件了标准的MFC类的资源。
如果指定了支持工具条,它还将指定工具条位图文件(RES\TOOLBAR.BMP)。ExMFC.rc2用于存放Visual Studio不可直接编辑的资源。

预编译头文件:STDAFX.CPP,STDAFX.H
这两个文件用于建立一个预编译的头文件ExMFC.PCH和一个预定义的类型文件STDAFX.OBJ。由于MFC体系结构非常大,包含许多头文件,
如果每次都编译的话比较费时。因此,我们把常用的MFC头文件都放在stdafx.h中,如afxwin.h、afxext.h、afxdisp.h、 afxcmn.h等,
然后让stdafx.cpp包含这个stdafx.h文件。这样,由于编译器可以识别哪些文件已经编译过,所以stdafx.cpp 就只编译一次,
并生成所谓的预编译头文件(因为它存放的是头文件编译后的信息,故名)。如果读者以后在编程时不想让有些MFC头文件每次都被编译,
也可以将它加入到stdafx.h中。采用预编译头文件可以加速编译过程。
好了,到现在你可能对AppWizard产生的程序文件有了一个很好的了解了,剩下的就是添加自己要完成特定功能的东西了。


3.项目设置Setting
////////////////////////////////////////////////////////
打开或新建一个包含至少一个工程的Workspace后,VC6的Project菜单中的“Settings…”命令就变为有效,选择它或者按下热键Alt+F7后,便可调出工程设置对话框,这里面的选项将影响整个工程的建立和调试过程,因此很重要,虽然在一般情况下,其中的大多数选项都不用改变,但了解一下它们的含义能够消除我们心中存在的神秘感,并加深我们对VC工程的理解。

在这个对话框中,左上方的下拉列表框用于选择一种工程配置,包括有Win32 Debug、Win32 Release和All Configurations(指前两种配置一起),某些选项在不同的工程配置中有不同的缺省值。左边的树形视图给出了当前工程所有的文件及分类情况。如果我们把工程“Schedule”置为高亮显示,对话框的右边就会出现总共十个选项卡,其中列出了与工程有关的各种选项,不少选项卡中有一个Reset按钮,按下它后可以把选项卡内的各项设置恢复到生成工程时的初始值。如果我们在树形视图中选择一个文件类或一个文件,那么对话框右边的选项卡会自动减少到一个或两个,其中列出的都是与选中的文件类或文件有关的选项。下面我们就以Win32 Debug为例来看看与工程有关的十个选项卡各自的功能与含义,与文件有关的选项卡则请大家自己琢磨一下。

General
这个选项卡比较简单,从上向下的第一个选项用于更改使用MFC类库的方式,大家是否还记得我们曾在AppWizard的第五步指定以DLL的方式来使用MFC类库?但现在我们可以在两种方式之间随意进行切换。第二个选项用于指定在编译连接过程中生成的中间文件和输出文件的存放目录,对于调试版本来说,缺省的目录是工程下面的“Debug”子目录。最下面的第三个选项用于指定是否允许每种工程配置都有自己的文件依赖关系(主要指头文件),由于绝大多数工程的调试版本和发布版本都具有相同的文件依赖关系,所以通常不需要更改该选项。

Debug
Debug选项卡中是一些与调试有关的选项,由于选项比较多,它们被分成了几个类,我们可以从Category中选择不同的类别,选项卡就会切换显示出相应的选项,后面的C/C++和Link选项卡也有这种情况。在General 类别中,我们可以指定要调试的可执行文件名,如果正在编写的程序是一个DLL,那么应在此处指定一个用来调试该DLL的EXE文件。另外三个选项可以指定用于调试的工作目录,开始调试时给程序传送的命令行参数,以及进行远程调试时可执行文件的路径。把类别切换到Additional DLLs后,我们可以指定在开始调试时是否为一些额外的DLL装载调试符号信息,只有装载了符号信息后才能跟踪进DLL。

C/C++
C/C++选项卡控制着VC6的编译器,其中的选项比较多,也比较复杂,要重点介绍一下它。最下面有一个Project Options编辑框,里面列出的各种命令开关将会在开始编译时作为命令行参数传送给VC6的编译器,以便对编译过程进行控制。这些命令开关会跟随其它选项改变而改变,另外,如果我们知道某些命令开关,也可以直接在这个编辑框中输入,开关所对应的选项会自动改变。
  在General 类别中,Warning level用于指定编译器显示警告的级别,None表示不显示任何警告,L1表示只显示严重的警告,L2表示显示比L1次严重的警告,L3表示显示比L2 次严重的警告,L4则表示显示出所有的警告,包括那些安全忽略的警告,如果选中了Warnings as errors,那么显示的每一个警告都将会引起一个错误,这样在编译完毕后就无法启动连接器来进行连接。C/C++语言的语法相当复杂和严格,尽管编辑器在产生了警告后并不会中断工程的建立过程,但警告信息往往表示程序在某些地方存在着潜在的问题,所以心铃建议大家今后把警告等级设置成L3,并尽量排除掉编译过程中产生的警告。
  Optimizations用于设置代码优化方式,优化的目的主要有提高运行速度和减小程序体积两种,但有时候这两种目的是相互矛盾的。另外,在极少数情况下,不进行优化,程序能正常运行,打开了优化措施之后,程序却会出现一些莫名其妙的问题。其实这多半是程序中有潜在的错误,关闭优化措施往往只是暂时解决问题。
  Debug info用于指定编译器产生的调试信息的类型,VC6支持即编即调功能,为了使用这一项功能,必须在这里选择生成“Program Database for Edit and Continue”类型的调试信息,而不能生成与老版本编译器兼容的调试信息。
  Preprocessor definitions是一些预先定义的宏名,MFC类库和Windows的头文件中大量使用了这些宏来设置条件编译。
  C++ Language类别中的选项涉及到了C++语言的一些高级特性,包括有成员指针的表示方式、异常处理、运行时类型信息、构造位移等,它们的概念都比较深奥,好在我们一般情况下都不用改变它们。
  Code Generation类别中的选项涉及如何生成目标代码,在这里我们可以选择目标处理器的类型、运行时库的类型、进行函数调用时参数的缺省传递方式、结构成员的对齐方式等,一般情况下保持缺省值即可。
  在Customize类别中,从上到下六个选项的含义分别为:是否禁止使用Microsoft对C++的扩展;是否允许函数级别的连接;是否消除重复的字符串;是否允许进行最小化的重建;是否允许递增编译方式;是否允许编译器在开始运行时向Output窗口中输出自己的版本信息。其中第二、三两项为灰色是因为它们与即编即调功能不兼容,如果在General类别中选择生成其它类型的调试信息,那么就可以更改这两个选项。
  在Listing Files类别中,我们可以指定编译器生成浏览信息和列表文件(Listing file),前者可由浏览信息维护工具BSCMAKE生成浏览信息文件,后者则包含了C/C++源文件经过编译后对应的汇编指令。
  Optimizations类别允许我们对优化措施进行更细微的控制,选择了Customize后,便可以选择进行哪几项优化,在Inline expansion中我们可以指定对内联函数的扩展方式。
  Precompiled Headers类别中是关于预编译头文件的一些选项,一般情况下都不用更改。Preprocessor类别中是关于预处理的一些选择,我们可以在这里预先定义一些宏名,指定部分或所有符号具有未定义状态,指定额外的包含文件所在的目录。

Link
Link 选项卡控制着VC6的连接器,同样比较复杂。
  在General类别中,我们可以指定输出的文件名,以及一些在连接过程中需要使用的额外的库文件或目标文件,下边五个选项的含义分别为:生成调试信息;忽略所有缺省的库文件;允许递增连接方式(这种方式可以加快连接的速度);生成MAP文件;允许进行性能分析。
  Customize 类别中的一些选项与General类别有重复。选中Use program database允许使用程序数据库,这样连接器会把调试信息放在程序数据库中,如果不选中该选项,那么也不能使用递增连接方式。如果选中了Force file output,那么即使某个模块引用了一些未定义或者重复定义的符号,连接器仍然会生成一个有效(但不一定能正确运行)的可执行文件。
  在Debug类别中,我们可以指定调试信息的类别是Microsoft的格式,还是COFF格式,或者两种都有,选中Separate types后连接器会把调试信息分开放在PDB文件中,这样连接起来会更快一些,但调试时速度却会慢一些。
  Input类别中是一些与输入库文件有关的选项,我们可以在这里指定使用或不使用某些库文件或目标文件。
  Output类别中则是一些与最终输出的可执行文件有关的选项,包括:程序装载的基地址;程序的入口地址;要为堆栈保留多少空间;程序的版本号。这些选项虽然是空着的,但它们都有自己的缺省值,一般情况下都不用改变。

Resources
Resources选项卡控制着VC6的资源编译器。我们可以指定编译后生成的资源文件的路径,资源的语言类型,以及额外的资源包含目录。

MIDL
这个选项卡与COM(组件对象模型)编程有关,我们不讨论它。

Browse Info
在这个选项卡中,我们可以指定是否在建立工程的同时也生成浏览信息文件,有了这个文件后,我们就能够在文本编辑器中通过
关联菜单的相应命令快速定位到某个符号的定义或引用的地方。

Custom Build
这个选项卡允许我们为建立工程增加自己的步骤,其中在Commands中输入要执行的命令,在Outputs中输入该命令执行后得到的输出文件,
VC6将检查这个输出文件和源文件的时间先后关系,以便在需要的时候再次执行指定的命令,重新生成一次输出文件。

Pre-link step
这个选项卡用于添加在连接之前要执行的命令。

Post-build step
这个选项卡用于添加在工程建立完毕之后要执行的命令。
posted @ 2009-08-16 14:55  芈希有  阅读(1023)  评论(0编辑  收藏  举报