背景资料:从VC6之后VC就使用解决方案(Solution)来替代原来的工作空间,用于组织和管理多个相关的项目(Project)。
下面就以一个例子来说明怎样一步一步的创建一个VC2005解决方案。
比如该方案名为StepByStep。里面共有3个工程:应用程序工程EXE,静态库工程LIB,和动态库工程DLL。另外还要用到第三方的库。
第一步,为解决方案设计目录结构
1. SetpBySetp是解决方案目录
2. Bin是存放最终可发布的生成文件的文件夹
3. Config文件夹内存放配置文件
4. Lib内是存放所有的.lib文件(lib文件夹内)和使用库文件所需的头文件(inc文件夹内)
5. Source内是所有工程的源代码
6. Temp是临时文件夹,存放中间文件(Intermediate)和输出文件(Output文件夹)
第二步,为解决方案编写启动批处理文件(.bat)
rem -- This .bat file is used to start the solution
rem -- These variables can be changed as you need
set VIRTUALDIRVE=S:
set REALPATH=D:\StarLee
@echo Create the virtual dirve ...
if not exist %VIRTUALDIRVE% subst %VIRTUALDIRVE% %REALPATH%
@echo -- Success!
@echo.
@echo Set develop environment variables ...
set SOLUTIONNAME=StepByStep
set ROOT=%VIRTUALDIRVE%\%SOLUTIONNAME%
set BIN=%ROOT%\Bin
set CONFIG=%ROOT%\Config
set LIB=%ROOT%\Liblib
set SOURCE=%ROOT%\Source
set TEMP=%ROOT%\Temp
set OUTPUT=%TEMP%\Output
set INTERMEDIATE=%TEMP%\Intermediate
@echo -- Success!
@echo.
@echo Open solution in VS.Net IDE ...
if not exist %SOURCE%\%SOLUTIONNAME%.sln goto ERROR_NOT_FOUND_SOLUTION_FILE
devenv %SOURCE%\%SOLUTIONNAME%.sln
@echo -- Success!
goto END
:ERROR_NOT_FOUND_SOLUTION_FILE
@echo ERROR: Not found the solution file!
goto END
:END
可以将该批处理文件放在解决方案根目录下。
该批处理文件分为3个部分:
1. 设置虚拟盘
文件中是把D:\StarLee设置成了虚拟盘S:,这样做的好处是可以方便的访问解决方案中的各个文件,便于管理。
背景资料:subst命令可以将一个目录设置为一个虚拟盘。详细信息可以参照subst的帮助信息。
2. 设置环境变量
在这里设置的环境变量会在工程的属性设置中用到。
3. 启动解决方案
调用VS的devenv来在VS的IDE里面打开解决方案。
使用方法:
在开始菜单中打开“Microsoft Visual Studio 2005”,选择“Visual Studio Tools”,点击“Visual Studio 2005 Command Prompt”,然后在弹出的Command窗口中执行该批处理文件,就可以直接在VS的IDE里面打开解决方案。
在软件开发的时候,一般都会使用版本控制程序(如VSS,Perforce等)来对源代码进行管理,代码以及目录结构都会存放在服务器上。如果目录结构需要改变,那么针对每个客户端上的开发者来说,重新构建开发目录结构是一个很麻烦的事情。而有了上面这个批处理文件,一切都变的容易了,只要修改这个批处理文件中的环境变量就行了。每个开发人员都可以根据自己的情况来修改文件中第一部分的VIRTUALDIRVE和REALPATH,再加上后面两步中的方法,就可以避免重新构建开发目录。
第三步,为解决方案创建一个Project Property Sheet
1. 在VS的IDE菜单中选择“View”,然后选择“Property Manager”。
2. 在Property Manager中用向导创建一个Project Property Sheet。将创建出的Project Propery Sheet存放在Config文件夹内(本例中该文件为StepByStep.vsprops)。
3. 编辑“Gerneral”选项页中的“Output Directory”和“Intermediate Directory”属性。分别输入$(OUTPUT)和$(INTERMEDIATE)。
4. 编辑“Post-Build Event”选项页中的“Command Line”属性。输入下面的命令:
copy $(OUTPUT)\*.dll $(BIN)
copy $(OUTPUT)\*.exe $(BIN)
copy $(OUTPUT)\*.lib $(LIB)
5. 保存Project Property Sheet。
这里用到了在第二步中的批处理文件里面创建的环境变量。如果目录结构改变,只要修改批处理文件即可,不需要修改项目文件。
Project Property Sheet其实就是一个项目属性模板。
一个解决方案中的各个项目的属性设置中有很多都是相同的,可以把这些相同的属性都存放在一个Project Property Sheet里,然后让每个项目中这些相同的属性继承自这个Project Property Sheet。那样当这些相同的属性需要改变的时候,只要改变Project Property Sheet文件就行了,而不用一个一个项目的改变。而且,一个Project Property Sheet还可以从另外一个Project Property Sheet继承。这跟面向对象中类的继承是一样的。
其实,Project Property Sheet对应的.vsprops就是一个XML文件。本例中StepByStep.vsprops文件的内容如下:
<VisualStudioPropertySheet
ProjectType="Visual C++"
Version="8.00"
Name="StepByStep"
OutputDirectory="$(OUTPUT)"
IntermediateDirectory="$(INTERMEDIATE)"
>
<Tool
Name="VCPostBuildEventTool"
CommandLine="copy $(OUTPUT)*.dll $(BIN) copy $(OUTPUT)*.exe $(BIN) copy $(OUTPUT)*.lib $(LIB) "
/>
</VisualStudioPropertySheet>
第四步,让解决方案中的各个项目属性从Project Property Sheet继承
1. 打开项目的属性页,将“Configuration”改为“All Configurations”,以使属性的修改对所有配置都有效。在“Inherited Project Property Sheet”中输入$(CONFIG)\StepByStep.vsprops。
2. 选择要从Project Property Sheet继承的属性,在下拉框中选择“<inherit from parent or project defaults>”,然后点击“Apply”按钮就行了。
通过上面四步,就创建了一个完整的,有合理目录的,非常便于管理的VC2005解决方案。在需要发布的时候,只要在Release配置下进行编译,然后将Bin文件夹内的文件打包即可。
其实,上面的例子只是一个很小的解决方案。在一些中型或者大型的软件开发过程中,解决方案肯定比这个要庞大很多,相关的目录结构和配置也会复杂很多,那样就更能体现出上面的方法和步骤的优点。