Visuals studio 2005项目属性配置要点


    要编程开发产品,除了对编程语言的运用外,还需要一个协助你编程的环境。现代的开发工具功能异常强大,方便地重构,代码自动补全,各种调试神器,让你做起事来事半功倍。我是用Visual studio 2005来做开发的,今天猛地发现,原来对这个环境还有很多东西值得我们去探究。


Debug 和 Release的区别

    Debug顾名思义就是调试版,生成的程序没有经过优化并且包含跟踪需要的调试信息,在程序运行时,可以设置断点,查看断点发生时,所有变量的值。加上Visual stdio IDE配套的各种调试神器,Call Stacks,Memory, Watch等等,再配上断点设置策略(数据断点,函数断点), 为程序查BUG提供了强大的支持。

    Release版就是发布版,通常不加入任何调试信息,可执行文件比调试版的要小得多,并且优化为速度最快。

    右键项目Properties,-> Configuration Properties-> C/C++ -> General下,有个Debug Information Format选项。Debug版的一般选择Program Database (/Zi),生成记录调试信息的.pdb文件,Release版的一般选择为Disabled.

    右键项目Properties -> Configuration Properties -> C/C++ ->Optimization 下,有个Optimization选项,Debug版的一般选择 Disabled, Release版的一般选择Maximize Speed (/O2)优化为最快速度。

    右键项目 Properties -> Configuration Properties -> Linker ->Debugging 下,Generate Debug Info 选项,Debug版的一般选择Yes (/DEBUG) , Release版的一般选择No。

 

MDd,MD,MTd,MT的区别

    在Visual studio开发环境中 ,右键项目Properties ->Configuration Properties -> C/C++ -> Code Generation下,有个Runtime Library选项。

分别是

Multi-threaded Debug DLL (/MDd)

 

Multi-threaded DLL (/MD)

 

Multi-threaded Debug (/MTd)

 

Multi-threaded (/MT)

 

MD 指的是 Multi-threaded DLL,使用多线程的动态库版本的运行库。

MT指的是 Multi-threaded ,使用多线程的非动态库版本(静态链接的版本)运行库。

MD 或MT后加上个d,表示调试版(Debug),无论你使用动态库版本的还是静态链接版本的运行库,如果你在调试程序的话,就得选用带d的。因为带d的才有调试信息,在调试的时候才能跟踪进去。

 

在一个工程里面,运行库只能选择使用其中一种,如果既选择了动态库版本(链接MSVCRT.lib.,运行时需要MSVCRT.dll),又选择静态库版本(链接LIBCMT.lib)的话,运行库就会被重复定义,编译的时候就会出错。所以一个工程,包括它所依赖的静态库工程,都得统一运行库的版本。要么都使用MT,要么都使用MD。

因为MFC也会用到运行库,所以如果使用了MFC的类的话,MFC的运行库也是要和工程的统一起来,在右键项目Properties ->Configuration Properties -> General下的Use of MFC选项,如果使用动态库版本的运行库,那就得选择Use MFC in a Shared DLL,如果使用静态链接的的运行库,那就选择UseMFC in a Static Library。如果没有用到MFC的话,那么选择Use Standard Windows Libraries就可以了。

 

一个工程使用MT或者MTd静态链接的运行库时也会有可能出现编译错误,说某些函数重复定义。如下:

uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecloperator new(unsigned int)" (??2@YAPAXI@Z) already defined inLIBCMTD.lib(new.obj)

 

如果遇到uafxcwd.lib(调试版的带d)或者msvcrtd.lib(调试版的带d)的某某函数已经在libcmtd.lib(调试版的带d)里定义的编译错误,那是因为CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

    只要右键项目Properties -> Configuration Properties -> Linker -> Input下的 Ignore Specified Library选项填上 uafxcwd.liblibcmtd.lib , 把这两个库都忽略,然后在Linker->Input 下的Additional Dependencies加上 uafxcwd.liblibcmtd.lib(先链接MFC的,再链接CRT),即可解决。

 

 

解决方案的配置

在Visual studio 2005在工具栏中有一个设置Solution Configuration的下拉框,设置当前的解决方案的配置,默认有Debug,和Release两种选择。上面提到有MT,MD两大类别,所以我们可以在里面添加MD_Debug,MD_Release,MT_Debug,MT_Release等,每当我们选定一个配置的时候,Configuration Manager会列出当前解决方案下的所有工程对应当前配置的配置。如下图。

 

我们可以点击对应工程的Configuration的下拉框,设置当前MT_Debug配置下,该工程对应的配置名称,每个工程默认也是只有Debug和Release的,如果需要增加,也可以对每一个工程进行配置。

       当这些都配置好以后,我们就可以非常方便地切换到不同的版本去生成程序。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值