如果一个VC的项目中,有10个或者更多的工程(Project),当我们需要进行一次完整的构建(Build)时,如果你分别用VC 打开每个工程然后Build,相信大家都会觉得很是麻烦。其实VC就自带了一个强大的自动构建的工具: nmake 。它可以帮助你完成日常的构建工作。
nmake的详细用法,你可以通过在控制台下输入:nmake /help来查看。下面我举个实际的例子。
该项目有大约十多个工程,目录结构如下:
src/ +TSHA_LIB +TSHP_CFG +TSHA_BROW +... +TSHC_OPT |
所有的项目文件源码位于src目录下,每个工程占用一个独立的目录。这时,我们可以编写Makefile文件如下:
VC=MSDEV.EXE CFLAG_ALL=/make /rebuild RMDIR=rmdir /S /Q BIN_DLL_DIR=E:/Project/dvlp/client/Release/bin DEST_DLL_DIR=E:/Project/dist/dll DEST_BIN_DIR=E:/Project/dist/bin all: @echo Now building 共通 $(VC) TSHA_LIB/TSHA_LIB.dsp $(CFLAG_ALL) @echo Now building 故障管理 $(VC) TSHP_MON_MAPX/TSHP_MON.dsp $(CFLAG_ALL) @echo Now building 安全管理 $(VC) TSHI_SEC/TSHI_SEC.dsp $(CFLAG_ALL) @echo Now building 资源管理 $(VC) TSHP_CFG/TSHP_CFG.dsp $(CFLAG_ALL) @echo Now building 浏览器 $(VC) TSHA_BROW/TSHA_BROW.dsp $(CFLAG_ALL) @echo Now building 主控画面 $(VC) MAIN_MENU/MAIN_MNU.dsp $(CFLAG_ALL) @echo Now building TSData $(VC) TSHA_DATA/TSHA_DATA.dsp $(CFLAG_ALL) @echo Now building 配置管理 $(VC) TSHB_CFG/TSHB_CFG.dsp $(CFLAG_ALL) @echo Now building 系统管理 $(VC) TSHE_SMT/TSHE_SMT.dsp $(CFLAG_ALL) @echo Now building 综合查询 $(VC) TSHF_QRY/TSHF_QRY.dsp $(CFLAG_ALL) @echo Now building 系能分析 $(VC) TSHP_NSO/TSHP_NSO.dsp $(CFLAG_ALL) @echo Now building 工单管理 $(VC) TSHL_TER/TSHL_TER.dsp $(CFLAG_ALL) @echo Now building 操作维护 $(VC) TSHC_OPT/TSHC_OPT.dsp $(CFLAG_ALL) @echo Now removing trash $(RMDIR) TSHA_LIB/Release $(RMDIR) TSHP_NSO/Release $(RMDIR) TSHP_CFG/Release $(RMDIR) TSHF_QRY/Release $(RMDIR) TSHE_SMT/Release $(RMDIR) TSHB_CFG/Release $(RMDIR) TSHA_DATA/Release $(RMDIR) MAIN_MENU/Release $(RMDIR) TSHA_BROW/Release $(RMDIR) TSHI_SEC/Release $(RMDIR) TSHP_MON_MAPX/Release $(RMDIR) TSHL_TER/Release $(RMDIR) TSHC_OPT/Release copy $(BIN_DLL_DIR)/TSHA_LIB.dll $(DEST_DLL_DIR) copy $(BIN_DLL_DIR)/TSHA_Data.dll $(DEST_DLL_DIR) copy $(BIN_DLL_DIR)/TSHP_NSO.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHP_CFG.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHF_QRY.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHE_SMT.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHB_CFG.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/MAIN_MNU.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHA_BROW.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHI_SEC.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHP_MON.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHL_TER.exe $(DEST_BIN_DIR) copy $(BIN_DLL_DIR)/TSHC_OPT.exe $(DEST_BIN_DIR) |
对比上面的文件和你的项目结构,把它稍作修改,最好保存为‘Makefile’文件名。熟悉 UNIX的朋友都知道make使用Makefile作为配置文件,nmake亦然。把保存好的Makefile放在src目录下,在src目录下运行nmake就可以自动构建你的项目了。
很简单吧,Makefile的编写方法几乎UNIX下的Makefile相同。文件的开头是一些变量定义,比如:CFLAG_ALL是编译的参数,BIN_DLL_DIR是输出文件的位置,它和每个Project中的设置是一样的。构建后,我们可以自动调用rmdir删除目标文件,最后,把所有的.exe文件和.dll文件拷贝到Install Shield的工程目录下,在这里就是DEST_DLL_DIR和DEST_BIN_DIR 指定的目录。
Bingo,到此为止,用nmake自动构建就已经基本完成了。下面我们开始用Install Shield打包项目文件了,这个过程更简单,打开Install Shield,在菜单[Build] 中找到[Export (Build) Batch File...],输出一个.bat文件。以后你就不需要打开Install Shield,而只要执行这个.bat文件就可以给你的项目打包了。
如果你想把编译和打包一起做,你可在Makefile的最后调用打包的.bat文件。这样只要在控制台下输入nmake,1/10柱香的工夫你的项目就自动构建好了,岂不快哉。