Chinaunix首页 | 论坛 | 博客
  • 博客访问: 211800
  • 博文数量: 16
  • 博客积分: 371
  • 博客等级: 二等列兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-09 21:56
文章分类

全部博文(16)

文章存档

2015年(4)

2012年(3)

2011年(9)

分类:

2011-09-20 18:12:25

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

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

          General

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

          Debug

Debug选项卡中是一些与调试有关的选项,如图9-2所示,由于选项比较多,它们被分成了几个类,我们可以从Category中选择不同的类别,选项卡就会切换显示出相应的选项,后面的C/C++Link选项卡也有这种情况。

General 类别中,我们可以指定要调试的可执行文件名,如果正在编写的程序是一个DLL,那么应在此处指定一个用来调试该DLLEXE文件。另外三个选项可以指定 用于调试的工作目录,开始调试时给程序传送的命令行参数,以及进行远程调试时可执行文件的路径。把类别切换到Additional DLLs后,我们可以指定在开始调试时是否为一些额外的DLL装载调试符号信息,只有装载了符号信息后才能跟踪进DLL

          C/C++

C/C ++选项卡控制着VC6的编译器,其中的选项比较多,也比较复杂,心铃要重点介绍一下它。如图9-3所示,最下面有一个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类别中,从上到下六个选项的含义分别为:是否禁止使用MicrosoftC++的扩 展;是否允许函数级别的连接;是否消除重复的字符串;是否允许进行最小化的重建;是否允许递增编译方式;是否允许编译器在开始运行时向Output窗口中 输出自己的版本信息。其中第二、三两项为灰色是因为它们与即编即调功能不兼容,如果在General类别中选择生成其它类型的调试信息,那么就可以更改这 两个选项。

Listing Files类别中,我们可以指定编译器生成浏览信息和列表文件(Listing file),前者可由浏览信息维护工具BSCMAKE生成浏览信息文件,后者则包含了C/C++源文件经过编译后对应的汇编指令。 Optimizations类别允许我们对优化措施进行更细微的控制,选择了Customize后,便可以选择进行哪几项优化,在Inline expansion中我们可以指定对内联函数的扩展方式。Precompiled Headers类别中是关于预编译头文件的一些选项,一般情况下都不用更改。Preprocessor类别中是关于预处理的一些选择,我们可以在这里预先定义一些宏名,指定部分或所有符号具有未定义状态,指定额外的包含文件所在的目录。

          Link

Link 选项卡控制着VC6的连接器,同样比较复杂。如图9-4所示,在General类别中,我们可以指定输出的文件名,以及一些在连接过程中需要使用的额外的 库文件或目标文件,下边五个选项的含义分别为:生成调试信息;忽略所有缺省的库文件;允许递增连接方式(这种方式可以加快连接的速度);生成MAP文件; 允许进行性能分析。

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

          Resources

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

          MIDL

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

          Browse Info

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

          Custom Build

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

          Pre-link step

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

          Post-build step

这个选项卡用于添加在工程建立完毕之后要执行的命令。

    例如:copy   Debug\*.lib   ..\lib

阅读(1424) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~