2010年11月18日星期四

如何自动将Visual Studio编译生成的dll和lib文件放置到不同的路径中

又是很久没有更新博客了,最近相对比较忙,做了一个项目代码重构,已经完成了8成了。今天给自己放假一天,这就是在研究所上班的最大好处之一,很自由,可以给自己放假:-)
今天写一点关于Visual Studio使用的一个小技巧。
Visual Studio编译生成的dll和lib文件放置到不同的路径中,其实很有用,如果我们有很多的项目,而且项目间的dll相互依赖,那么将编译生成的dll和lib文件放在统一的路径或目录中还是很方便的。
以下是我的做法,我们需要先写一个bat。
以下是copy_output.bat的写法,类似这样:

@echo copying file(s)
@echo off
REM @echo on
@REM echo %1\%2
@REM dir /p %1\%2.dll
@REM copy the exe file, if exists
if exist %1\%2.exe for /F "eol= tokens=4,4,* delims= " %%X in ('dir /p %1\%2.exe') do if exist %1\%%X copy %1\%%X %YOUR_BIN_PATH%
@REM copy the dll file, if exist
if exist %1\%2.dll for /F "eol= tokens=4,4,* delims= " %%X in ('dir /p %1\%2.dll') do (if exist %1\%%X copy %1\%%X %YOUR_BIN_PATH%)
@REM copy the lib file, if exists
if exist %1\%2.lib for /F "eol= tokens=4,4,* delims= " %%X in ('dir /p %1\%2.lib') do (if exist %1\%%X copy %1\%%X %YOUR_LIB_PATH%)

我们还要在Visual Studio的project的属性进行一点设置,具体如下截图所示(我使用的是德文版的VS):
vs2005_dll_lib_build_event

点选进入Build Events,在Post-Build Event的Command Line中输入copy_output.bat $(TargetDir) $(TargetName),完成。


附注:如果路径上有空格譬如,C:\Program Files,那么要在$(TargetDir)上加入引号。
copy_output.bat "$(TargetDir)" $(TargetName)

没有评论: