以前每天到公司的都有一系列很繁琐的东西要做:开工程文件夹、SVN更新、用CMake更新工程文件、用VS开sln、编译。。。这些动作都是有先后顺序的,前者完成之后才能开始后者,这样就浪费的大量时间在等待上,如果能够一键搞定就好了。可以说是要偷懒,也可以说是要提高工作效率,自然就会去想办法让这一系列的动作自动化,由于是windows平台,就考虑用bat批处理来搞定。
我的结构是:OneKeyDone.bat 为主要执行文件,里面分别调用Update.bat、Generate.bat、OpenVS.bat、OpenDir.bat四个批处理文件,每次只需要双击OneKeyDone.bat就可以完成所有动作。当然,我们也要保留其他功能的独立性,比如我编辑的工程,直接执行Generate.bat去更新工程就够了。下面是实现:
--------------------------------------------- OneKeyDone.bat ------------------------------------------
rem "rem" 标示的一行为注释行,“echo off/on” 打开或关闭提示符,“color 2f”设置前景色和背景色,call 调用另一个批处理
@echo off
color 2f
call ./Update.bat
call ./Generate.bat
call ./OpenVS.bat
call OpenDir.bat
@echo on
--------------------------------------------- Update.bat ------------------------------------------------
@echo off
color 2f
rem 设置各个路径变量
@set svn_bin=C:\Program Files\TortoiseSVN\bin
@set trunk_dir=E:\Code\trunk
@set bin_dir=E:\Code\trunk\bin
rem echo 后的内容会被打印到控制台上
@echo ========================== Update trunk =========================
rem 关于SVN更新命令行的参数请参阅有关文档,这里command:update表示让SVN更新,也可以Merge、checkout等
rem /path:"%trunk_dir%" 设置更新路径
rem 设置/closeonend:2表示更新没有问题(没冲突等)直接关闭更新对话框,否则等待用户处理
"%snv_bin%"\TortoiseProc.exe\command:update /path:"%trunk_dir%" /notempfile /closeonend:2
@echo ========================== Update bin ===========================
"%svn_bin%"\TortoiseProc.exe\command:update /path:"%bin_dir%" /notempfile /closeonend:2
@echo on
---------------------------------------------- Generate.bat -------------------------------------------------
@echo off
color 2f
@set trunk_dir=E:\Code\trunk
pushd %trunk_dir%
md %trunk_dir%\build
cd %trunk_dir%\build
rem cmake -G 的选项指定要生成的工程类型,可以是各个VS的版本,也可以是NMake等
rem -DBINARY_DIR=%trunk_dir% 定义了一个宏变量,这是CMakeList.txt文件编写时的一个设置,其他用户可不管
cmake -G "Visual Studio 11" %trunk_dir% -DBINARY_DIR=%trunk_dir%
@echo on
----------------------------------------------- OpenVS.bat ----------------------------------------------------
@echo off
color 2f
@set trunk_dir=E:\Code\trunk\build
@set vc_dir=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE
@set sln_name=E:\Code\trunk\build\All.sln
rem VS的路径有空格,需要用双引号包含,否则批处理会把空格处作为一句命令结束,%vs_dir%表示引用前面定义的变量值
"%vs_dir%"\devenv.exe "%sln_name%"
@echo on
------------------------------------------------- OpenDir.bat -------------------------------------------
@echo off
color 2f
@set trunk_dir=E:\Code\trunk
@set bin_dir=E:\Code\trunk\bin
@start explorer "%trunk_dir%"
@start explorer "%bin_dir%"
@echo on
好了,有了这些批处理,只要打开电脑后,直接双击OneKeyDone.bat就可以完成这些动作,这期间你可以放心的干点别的事。当然如果更新有冲突,则会等待你的处理。当然,如果有需要,还可以进行拓展,比如版本发布机就可以搞一个 SVN更新--VS编译--SVN版本提交 这样一个命令。