??xml version="1.0" encoding="utf-8" standalone="yes"?> Ҏ|上
http://blog.dream4ever.org/dirt/archive/2005/12/20/79946.drl q篇文章,初步作了一?由subversion 的post-commit 触发的自动更新所有相关代码编?q把~译l果以及信息发送给相关人员的邮件的finalbuilder工程,目的是期望所有程序员能够L一U提交可~译代码的习? 其中需要用CU叫?subversion info 的action cd, 其原理大概是调用 subversion/bin 里面?svn.exe 加上参数 info 然后从标准输Z匚w相关信息取得特定数据攑ֈ 指定的变量中,但是其action始终不能执行成功,更别提保存我需要的变量? l过一pd试验,估计是由于svn在中文操作系l上q回的是cM下面的中文信?/p>
C:\Program Files\Subversion\bin>svn info D:\LocalSvnForDailyBuild\dest 而finalbuilder期望的估计是英文的输?所以匹配不了导致失?/p>
l过几番试验 最后把subversion 目录 C:\Program Files\Subversion\share\locale\zh_CN\LC_MESSAGES\subversion.mo 文字信息文g删除掉后,svnq回都用了默认的英?而finalbuilder也终于运行成? 最后一ơ提交者提交时间都能够正常取到! 没有什么技术含?只是在这里记录下?希望遇到相同问题的朋友可以搜索得?不用再折腾?/p>
E序员的机器配置已经很不错了Q?? 的主?g的内存,但是常常׃一个小的修改导?分钟甚至更长的编译时间来验证效果?br />
按照《Joel on software》的说法Q其直接后果是可怕的Q?br />E序员们在这8分钟内无所事事Q只有查看网,或者qqmsnQ打断先前的思\从他们的上下文环境里面脱M出来Q离开了“顺势工作时间”,{到他们~译好了验证再修改的时候,他们又得׃的旉来回到刚才的思\
“顺势工作时间”大致意思就是说2个不q箋的半时的效果远不如一个连l沉的1时的工作效果,如果一个h不能q箋沉浸的思考,那么他就很可能陷入在不停的上下文环境切换和浅表思考当中。h的多U程处理和机器是一L环境的切换不能够不考虑
所以,在当前机器配|已l没有什么提升空间的情况下,我在目l内部组l了一ơ整Ҏ动,旨在降低~译构徏旉
1?strong>目标Q将完全重新~译旉?分钟降低?分钟以下
2?strong>原则Q通过和主E序的沟通,q参考了《CQ+ coding Standards》出了一下几条整改原?
首先是关于include的,因ؓ包含头文件相当于代码复制到本文件来~译Q而头文g又经常是用来被别人包含的Q所以工E文件多了,每个文g都有include链(包含的文件又include了其他文ӞQ该链条不会止步于你工程Q而会延C所有用的W?方库里面
A.能够L的include去掉?br />
B.能够?/strong>cpp里面include的头文g不要在头文g里面include?br /> 说明Q尽量去掉每个cpp会被串v来的头文件膨胀的机?br />
C.能够用前向声明的׃要includeQ头文g里面也是一?br /> 说明Q在头文仉面用前向声明然后保存指针或者引用,在具体实现的cpp里面再包含头文gQ虽然看h和《CQ+ coding Standards》?a href="/flyingxu/archive/2006/06/23/8908.html">Make header files self-sufficient”有些冲H(前两天另外cppblog一位朋友讲q?a href="/flyingxu/archive/2006/06/23/8908.html">http://m.shnenglu.com/flyingxu/archive/2006/06/23/8908.htmlQ但是在一些核心的.h(被很多类include?里面作改造工作,q是能够收到很大的降低编译时间效果,而付出的代h是原来只需要包含该头文件就可以~译成功的cpp需要额外包含一些头文g?br />
举个例子Q?Foocd文g使用了前向申明保存了AcdBcȝ指针或者引用ؓ成员变量Q在Foocȝcpp里面才包含A和B的头文gQ而当Cc需要用FoocL候包含Foocȝ头文Ӟ但是操作中又需要调用A的成员函敎ͼC不同时包含A的头文g的花׃出现~译p|?br />
虽然表面上是让代码更加复杂了Q但是除却带来降低编译时间的好处之外Q代码也在强q你q行解耦合Q如果说你cpp里面需要包含的头文件越多,说明你这个类需要知道的对象p多,你可以乘机检查一下自q代码又没有不必要的耦合Qؓ什么这个cpp需要知道那么多的本来可能属于别的类的细?....
D?strong>把大多数模块都要使用的库文g或者稳定类的头文ginclude攑ֈ预编译头文g“stdafx.h”里?br /> 说明Q由于预~译头文仉面include的内容只会compile一ơ而被link多次Q把一些常用类攑ֈq里会降低很多编译时_但也不能乱来Q要点在?“大多数”和“稳定”,如果一个头文gl常变化Q他的一ơ小改动都会引v整个工程rebuildQ哪怕只是一个注释,因ؓ所有的cpp文g都包含了stdafx.h而stdafx.h又包含了q个Ҏ变动的头文g?br />
E.使用Pimpl惯用?br /> 说明Q关于Pimpl大家可以查下资料Q《CQ+ coding Standards》里面也有讲解,基本上就是采用一个私有的前向x的stuct指针把所有protect成员都封装v来v?基本上是一个最l极的解x案,但是Ҏ们现有架构改造太大,不敢全面实行Q我们只选择了数个最有h值的c进行了攚w,打算以后在其他项目里面再全面应用?br />
3。实?/strong>Q?通过半个时的沟通,让项目组E序员了解原则,q取结队修改的方式来降低引入新bug的风险,在以通过原有单元试用例的条件下Q进行修改-试Q提交的q代?strong>
4。结果: ~?/strong>译时间降低到?分钟以内。。。虽没有辑ֈ预期Q但也算有效果,没有完全达标的主要原因还是没有完整的试Ҏ包括单元试和验收测试,怕有些改动过大媄响系l健壮性,局部放弃了一些实施的原则?br />
把这个整改的工作写出来,一斚w作个记录Q另外一斚w希望和大家讨论,怺多多交流Q)
psQ?br />希望有过cM工作的朋友加我的
MSNQitso2_at_msn.com
大家多多沟?img src ="http://m.shnenglu.com/danoyang/aggbug/9310.html" width = "1" height = "1" />
]]>
#include "stdafx.h"
2
#include "testiostream.h"
3
#include <string>
4
#include <fstream>
5
6
7
BEGIN_MESSAGE_MAP(CtestiostreamApp, CWinApp)
8
END_MESSAGE_MAP()
9
10
CtestiostreamApp::CtestiostreamApp()
11

{
12
}
13
14
CtestiostreamApp theApp;
15
16
BOOL CtestiostreamApp::InitInstance()
17

{
18
CWinApp::InitInstance();
19
std::ifstream iput;
20
iput.open("F:\\中文.txt");
21
ASSERT(!iput.fail());
22
return FALSE;
23
}
vs2003不需要作M讄可以就可以成功
但是vs2005下每ơ都会失败在断言?查找了一些网上资?例如
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=371229&SiteID=1
发现但凡是uinicode的\径都是有该问题的.
解决Ҏ??br />1.W一个用vs2005默认的unicode setq在所有字W串外面面加上_T() 或者_TEXT?代h是原来所有不W合unicode规范的地方你都必d?
2.使用not set 或?mutibyte set" q在E序初始化的时候调用setlocale()如下
BOOL CtestiostreamApp::InitInstance()

{
setlocale(LC_ALL,"Chinese-simplified");
CWinApp::InitInstance();
std::ifstream iput;
iput.open("F:\\中文.txt");
ASSERT(!iput.fail());
return FALSE;
}
上述引用的ms论坛q接基本讲清楚了该问?但是׃我前几日搜烦中文相关信息时?实在未发现有用之内容,故记录下?希望有相同问题又不思其解的朋友可以花Ҏ?
]]>
路径QD:\LocalSvnForDailyBuild\dest
地址(URL)Q?a >http://192.168.1.100:3115/dest
Repository Root: http://192.168.1.100:3115/dest
案?UUIDQ?7b214da-b8ec-df4b-aac3-16e2c895fbbd
修订版:666
节点U类Q目?br />调度Q正?br />最后修改的作者:medicer
最后修改的修订版:666
最后修改的旉: 2006-05-18 11:58:03 +0800 (星期? 18 五月 2006)
属性最后更? 2006-05-15 10:41:52 +0800 (星期一, 15 五月 2006)