《Visual C++ 2010入门教程》系列五:合理组织项目、使用外部工具让工作更有效
这一章跟大家分享一些与c++项目管理、VAX、SVN、VS快捷键等方面的东西。
有效的在项目中组织C++文件,分配各种文件的目录对以后的维护会有好处的,至少不会出现不知道什么东西在什么地方,特别是大的项目,这里用TextSearcher来做例子。
使用SVN来管理项目会让我们的工作更轻松,工作也会更简单容易。
掌握常用的快捷键和常用的VS功能让我们的工作更有效。
合理的组织文件体系
我把不同功能的代码和文件放在不同的Filter下面,如何添加这样的Filter呢?
这样就可以添加筛选器了,默认情况下VS为我们创建三个筛选器:头文件、源文件和资源文件,实际上我们可以再增加很多。这样区分开的好处就是各个功能的代码被分开了,在文件很多的情况下不会造成混乱。如TextSearcher,它的搜索算法、软件控制逻辑、自定义控件、GUI模块、线程化操作都是分开的,这样我可以很容易找到我想找的文件,而且还可以检视自己的模块划分是否合理等等。
比如上图将头文件和源文件、资源图标文件、本地化文件和配置文件分开组织,这样也是为了防止混乱。值得注意的是当我们把文件用文件分开的时候,需要在项目属性设置里面包含我们的子目录,否则我们无法在源文件中直接用#include指令包含我们的头文件。如下图所示这样的情况,如果不添加,无法找到头文件。
如下图所示,找到项目属性中,C++,常规中把我们的子目录作为附加路径添加到“附加包含目录”中。
使用SVN或其它源代码管理工具管理我们的项目
如果你打算写一个比较大一点的项目,我推荐你使用源代码管理工具来管理你的C++项目,你可以选择SVN,也可以选择其它的,我推荐SVN,因为简单容易上手。
当你在做一个很复杂的东西的时候,花了两三天的时间去做修改,不过后来发现这个修改并不合适,想还原到三天以前,如果你没有用源代码管理工具管理自己的项目也没有自己手动的备份,那恭喜你,你得开始人肉还原了,这是多么悲剧的一件事情啊,然而如果你使用了SVN管理的话,只需要在三天前开始修改前的最后一次稳定版本Commit一次,三天之后如果要还原,只需要使用工具Revert就好了,而且不但可以回到三天前的版本,你甚至可以回到以前每一次Commit的版本,( ⊙o⊙ )哇,这是多么好的工具啊!
要使用SVN,首先需要SVN客户端,SVN服务器是可选的。我推荐大家使用TortoiseSVN这个SVN客户端,因为它简单易用、免费,支持Windows32Bit、64Bit,你可以去他们的官方网站下载,地址点我。有了这个工具当然还不够,为了让我们的SVN跟VS2010结合的更紧密,我们需要再下载一个SVN For VS的插件,我强烈推荐你使用它,因为它也非常简单易用,下载地址点我。最新版是支持VS2010的。当你装了这个插件的时候,如果你的项目是在SVN的管理之下,那么你的项目看起来会一些不同:
看到文件左边的勾了吗?灰色的勾表示正常,而橙色的勾表示已经更改了,而PendingChanges则告诉我们哪些文件时新加的,哪些文件被改过了,如果要还原的话,只需要选择该文件,右键点击,Revert就好了:
如果你已经安装好了AnkhSVN插件但是又看不到的话,那么请检查下系统选项卡里面是否选择了它作为默认的源代码管理工具:
回过头去继续说SVN,当我们安装好TortoiseSVN之后(安装后可能需要重启),我们在资源管理器中点击右键的时候就能看到它的菜单了:
虽然TortoiseSVN有中文语言包,但是我推荐大家使用英文的,就像古诗一定要用中文来表达一样,没有比英语单词表达SVN项目管理更恰当的词了。
SVN CheckOut可以让你获取其它地方SVN服务器上面的某个项目的源码,当然,前提是你要有权限才行,现在让我们试试。随便找个盘符如F盘,点右键,选择 SVN CheckOut,然后Url of Repository中输入svn://www.svnhost.cn/TextSearcher这个地址,其它的不变,点击OK。如图所示:
如果不出意外你能看到:
如果你看到这个画面说明你已经CheckOut成功了,那么恭喜你,你已经取到了TextSearcher的源码,当然要说一点的是,这个源码可能你取到之后编译不了,因为还有另外一些依赖项如dbsoft、boost、wxWidgets并不在这个SVN上面。
这样大家就可以去一些开源的网站上面Check你想要的东西了,哈哈。推荐大家去这个网站找自己感兴趣的代码CheckOut:http://sourceforge.net/
现在我们说如何管理自己的项目,大家可以像我一样去一些提供免费SVN服务器服务的网站上面注册一个账号建立项目就好了,比如说我使用的这个www.svnhost.cn,这个毕竟是国内的,另外上面的sourceforge.net也可以。当你注册建立项目成功之后就可以通过菜单Import把需要导入的东西导入到SVN服务器了:
导入界面的地址栏输入我们的SVN服务器地址即可,类似于:svn://www.svnhost.cn/TextSearcher。导出的时候记得输入日志。除了可以导入SVN服务器之外,我们还可以使用文件协议在自己的电脑上管理我们的代码,如果你不需要在多台电脑上面共同维护这个项目的话。
让我们随便找个地方新建一个文件夹,如D:TestSVNServer这个文件夹,然后对着这个新建的文件夹点右键,选择SVN>Create repository here,OK,你的本地SVN服务器已经建好了。如果创建成功,你会发现这个文件夹里面多了好多东西:
没关系,这是SVN服务必须要的一些东西,现在让我们使用文件协议导入我们的项目到该SVN服务器中,找到我们要导入的项目,跟导入网络上的SVN服务器一样,右击项目文件夹,SVN>Import。在Import界面中这样填:
不出意外你会导入成功,那么现在我们需要去其它地方重新获取这些东西了,换个地方,比如F盘根目录,选择SVN CheckOut,然后地址输入刚才导入的地址:
注意如上图这样是不行的,因为我们没办法在F盘根目录下面创建一个D:TestSVNServer文件夹,把D:这个SVN帮我们自己填充的路径删掉然后点确定。
现在我们已经CheckOut了刚才导入的项目了,Planet文件夹已经带上了一个绿色的勾。点击这个Planet目录,选择SVN>Show Log,你会看到:
在这个界面我们还可以检查代码的改变都是什么,这里由于是新的项目,所以没有更改,我们可以找到TextSearcher的更改来比较它们的改动都是什么:
Show Changes:
可能你弹出的界面跟我的不一样,因为我的比较工具是外部工具而不是默认自带的,因为默认自带的有问题,在合并的时候总是出错(公司项目)。所以我对默认的没有好感。这个软件的名称是:Araxis.Merge.Professional.2010,你可以去搜索来下载,这里有一份可以试试,不行就自己去搜索吧。
装好这个软件之后需要去SVN里面设置一下,SVN》Setting,设置如下:
这样就可以使用外部工具了。
下面再说明一下如何提交代码(Commit).
我们可以通过右击被SVN管理的项目,选择SVN Commit输入相关信息之后就可以提交了,通常提交都需要你提供用户名和密码验证等等,特别是网络上的SVN服务器,本地SVN服务器可以不管。
注意,SVN不会把你新添加的文件默认选中,它只会默认选中已经在SVN中添加了的文件。所以当新加了文件的时候注意勾上,防止漏传,这个在现在的SVN管理中漏上传时非常普遍且经常发生的事情。那么现在用VS的SVN插件也可以上传啊,对于添加到VS2010的IDE中的文件我推荐大家使用这种方式,因为这样可以有效的防止漏上传新加的代码,注意,有的二进制文件如资源文件MP3、PNG或者其他资源打包文件等可能不会添加到IDE中,因此这时候一定要注意不要漏传,去资源管理器中右击项目,SVN》ADD,将新加的有用的文件添加进去,一些临时文件和垃圾文件不要添加。
VS的SVN插件要提交更简单,在Pending Changes中选择要上传的,点击右键,Commit即可:
如果你的这个选项卡没有调出来可以通过视图》Pending Changes把它调出来。
如果项目中的其它人更新了代码,版本增加,那么请用Update获取最新的代码。
对于SVN,有很多丰富的内容,不是这里短短的时间可以说完的,建议大家去申请一个SVN服务器自己多使用一下,多摆弄下就熟悉了,能够熟练掌握SVN这样的源代码管理工具在找工作的时候是一个加分的不错的砝码。
2010.9.16 Patch Here:
在上面我们采用了Import的方式初始化SVN服务器,另外一个方法是我们先创建一个空的新的repository,然后我们Check这个空的Repository会得到一个空的被SVN管理的文件夹,这时候我们再把要添加的文件放到这个文件夹下面,然后再添加,再提交。这样可以省去先Import然后再CheckOut的麻烦和浪费。(这是2010.9.16对这篇文章打的补丁).
使用Visual AssistX让我们的工作更有效
Visual AssistX(简称VAX)是一款优秀的VS辅助插件,最新版支持VS2010。如果你有钱而且生活宽裕,建议你购买正版,你可以去他们的官方网站购买;如果你和我一样是个不折不扣的穷鬼,那么你可以点这里去下载破解版,当然请大家在心里感谢VAX的工程师们吧。
通常我们安装好VAX之后它会默认的帮我们开启它的大部分功能,而且这通常都是足够的,使用VAX的View选项卡可以轻松的在大型项目中找到我们想要的文件,如下图所示:
在符号表中还能轻松的找到我们的类在什么地方:
自动着色、自动添加括号,自动换行等等功能可以给我们莫大的帮助。
通过编辑Snippet可以让我们轻松添加Doxygen风格的注释帮助:
通过VAX的OutLine选项卡让我们阅读代码变得轻松:
没有这两个选项卡可以通过VAX的菜单,Tools把它们调出来。更多功能请自己去体会。
让我们熟悉VS2010的快捷键和其它一些有用的功能
VS2010是一个强大的工具,下面介绍一些常用的功能和快捷键。
1. 搜索所有文件
大部分朋友都知道用Ctrl+F来搜索和替换文件,但是并非每个朋友都知道Ctrl+Shift+F可以搜索所有文件:
我们还可以通过点击工具栏上面的那个按钮来弹出这个界面,这个界面可以搜索整个解决方案(一个解决方案可以有多个项目)、整个项目、打开的文件、单个文件和选定内容,还支持普通搜索、正则表达式和通配符搜索,如上图所示,我们搜索所有的boost。查找结果1会显示出项目文件中所有出现boost的地方,不区分大小写,不完整匹配:
双击就可以定位到行。
2.格式化代码 先按Ctrl+K 接着按Ctrl+F
通常我们都应该保持良好的编码风格,除非你打算参加“国际混乱程序大赛”。这个功能实际上在菜单》编辑》高级中就有,至少大部分人都不喜欢去挖掘这些功能。通常我们都是要格式化当前文件的所有代码,所以这个快捷键通常和Ctrl+A组合(全选)使用。 先全选,然后再全部格式化。
3. Ctrl + Tab 在前一个文件和后一个文件之间切换
首先我们打开多个文件,然后要切来切去用哪个,就用这个Ctrl + Tab:
4. VAX快捷键Alt+G
这个快捷键超有用,当你把光标定位到头文件,Alt+G会打开那个头文件,当你把光标定位到类、变量、函数等的时候,Alt+G都会跳到它的定义或者实现。它等于装了VAX之后右上角的那个GO!按钮。为什么要用这个,VS不是也有智能感知和识别吗?当你用VS多了的时候你就知道VS的智能感知是多么弱智的了。
5.编译生成调试相关
F5调试 Ctrl+F5直接运行 F7生成解决方案即生成所有项目 Ctrl+Alt+F7强行重新生成所有项目
F9 当前光标处设置断点 F10逐语句不进入子过程 F11逐语句并进入子过程
6. VAX快捷键Shift+Alt+O 打开文件
这个和上面说的VAX View中搜索并打开文件的功能差不多,这个会更友好一些。注意,如果你按这个快捷键不能打开这个界面的话,说明快捷键注册失败了。这个很正常,那你就用工具栏或者菜单吧。
7. 其它
编辑器相关的 Ctrl+S保存 Ctrl + Z 撤销 Ctrl+Y重做 ...
这一章的内容到此结束了,希望对大家有帮助,另外说一下,以上内容不仅适用于VC2010,包括VC2005、VC2008都是适用的。下一章再见。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 下面的内容请无视 用于搜索引擎帮助它们找到这篇文章,因为这篇文章可以解决下面的这些问题。
搜索引擎帮助Tag:
1.如何使用SVN
2.AnkhSVN如何使用
3.如何在本地使用SVN
4.如何创建本地SVN服务器
5.Visual Studio 2010/VS2010/VC2010/VC2005/VC2008/VS2005/VS2008 常用快捷键
6.Visual AssistX如何使用?
7.如何组织C++项目文件?
表达式求值
二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配
poj 1806
树的公共祖先问题LCA
给定两个长度相同,分别有序的数组A和B,求两个数组中所有数的中位数
网络爬虫基本原理(转载)
atoi函数的实现
一个天平,12个大小,外观相同的球,一个球的重量与其他的不同,称3次找出问题小球
动态规划求RMQ(区间最值问题Range Minimum/Maximum Query)
- 最新文章
-
WEB前端开发Vue框架
WEB前端开发Yarn
WEB项目开发流程简要
NPM更换国内源 NPM更换国内源
树莓派配置静态IP和开机自动连接wifi
用jQuery合并表格中左侧表头同列相同文本的相邻单元格(二)
SQL分割字符串详解
总结JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
用Javascript进行简单的Table点击排序[转]
在Web.config配置文件中自定义配置节点
- 热门文章
-
ASP.NET中TextBox控件设置ReadOnly="true"后台取不到值
分析java程序中cpu占用过高的线程
servletapi.jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
近期找工作的一点总结 Android
Android 生命周期初探
【转自知乎】初学者学习 Android 开发,有什么好网站推荐?
Api demo源码学习(17)App/Device Admin
Api demo源码学习(16)App/Activity/Alarm Alarm Controller&&Alarm Service
GitHub开源项目SlidingMenu简介
Api demo源码学习(15)App/Activity/Wallpaper 背景设置为桌面