VS Studio C/C++项目如何从Debug中快速复制或创建Release配置

原文地址:http://blog.sina.com.cn/s/blog_654116410102x8mm.html


当一个C/C++解决方案中,开发时一般都在Debug环境下,到了最后需要发布,那就要换成Release发布。

而当项目中存在众多的配置的时候,特别是C/C++项目,有很多特殊的配置,如路径、lib路径、include、预编译头等设置,这些设置如果在编译的时候被改动了,即不是默认的,那么你在项目中选择的默认Release配置中,是不会自动带过来的。

那怎么办?

有办法,主要是利用VS Studio的新建配置》》
219@365 <wbr>VS <wbr>Studio <wbr>C/C++项目如何从Debug中快速复制或创建Release配置?
219@365 <wbr>VS <wbr>Studio <wbr>C/C++项目如何从Debug中快速复制或创建Release配置?

但是这个并不能完全解决问题,
1、首先你的名字如果是Release,那么系统有些设置不会被原本复制过来,所以即使你很想,但名字绝对不能叫做Release哦
2、由于复制过来的是debug的配置,要自己设置成Release版相同的属性,才能真正发布出发布版
—— 注:release和debug的不同在于其编译设置不同,而不是名字有什么特殊
接下来你可以参考系统本身的Release的设置,来真正建立发布版本的属性,并不多,只有4个方面的不到10个地方,包括:
1、代码优化
1.1、常规》》全程序优化:使用链接时间代码生成
1.2、c、c++》》优化:优化:使速度最大化 (/O2)
1.3、c、c++》》优化:启用内部函数:是 (/Oi)
1.4、链接器》》优化:引用:是 (/OPT:REF)
1.5、链接器》》优化:启用comdat折叠:是 (/OPT:ICF)
2、去掉_DEBUG预处理器
在C/C++标签》》预处理器
这个务必去掉,如果不去掉,却使用发布的windll编译(多线程 DLL (/MD) ),会出现大量的错误,如果能编译通过也会出现: File:f:\dd\vctools\crt\crtw32\misc\dbgheap.c 运行时的问题。
即使是你自己的代码没有内存泄露或内存不良操作,也会出现dbgheap错误,为什么会这样呢?
因为我们应用的很多include或lib内部,存在很多_DEBUG代码块,这些代码只供调试追踪使用,是不能确保内存操作安全性的。

3、如果是DLL:C、C++运行库:改为多线程 DLL (/MD) 或根据情况选择其他不带d的
同时代码生成》》基本运行时检查》》也要设置为:默认值,否则会提示一些错误或冲突

4、调试信息开关
最终发布版,你必须去掉所有调试信息输出
c/c++》》常规》》调试信息格式:无
链接器》》调试》》生成调试信息:否
有意思的是:如果你想发布release版本,又想要保留一定程度的跟踪调试环境,你可以这样设置:
c/c++》》常规》》调试信息格式:选择 程序数据库 (/Zi) 
链接器》》调试》》生成调试信息:是 (/DEBUG)

这个release版调试功能非常有用,可以跟踪到语句和方法层面,并有完整的调用堆栈路径,但除了函数参数外,其他变量都无法监控或查看运行时数值,不过对于release版的重点问题追踪完全已经足够了,告诉你问题发生在哪。至于变量看不到,你完全可以增加一些log或printf来查看。

如果存在大量的project(比如我的项目存在超过100个project!!),逐个设置仍然很费时,好彩这些都是公共设置,你可以在vs中一次性选择多个项目文件,然后打开属性窗口,进行一次性修改,这样只需要修改一次即可。
另外,如果在你的project文件中已经存在的支付,可以通过NodePad++等编辑器,进行文件内替换功能。
比如我就是利用该工具,一次性把所有_DEBUG替换成_NDEBUG

最后提醒:
试验证明:你不能创建名为Release的配置,这个是系统预留的,虽然可以创建,但是创建出来的配置并非真正复制,而不是默认的。
你甚至不能先建立其他名字,然后再重命名为Release,都不行,所以:你只能命名为ReleaseXXX等这类名字,但是只要设置正确,名字不重要,你仍然可以发布出于Release完全一样的输出来的。

以上编译经验用于存在大量的lib和大量的dll项目,其他项目也是基本一样的。
最后祝各位好运,也希望本文的详细解说能帮到与代码打交道的程序员们。

猜你喜欢

转载自blog.csdn.net/zhangatm/article/details/80163107
今日推荐