一步一步創建VC2005解決方案

現在軟件開發已經告別了“獨行俠”的年代,而是以團隊開發爲主。一般情況下,一個解決方案都會包含多個項目,比如:其中一些是靜態庫項目,一些是動態庫項目,當然還會有應用程序項目。另外,根據需要,還可能會使用一些第三方庫。因此爲解決方案設置一個合理的目錄結構並配合一定的環境變量,不但可以使得代碼管理更井井有條,項目成員之間也更容易相互配合,更重要的是能夠使得最終應用程序的安裝包製作,源代碼打包發佈和轉移變得十分容易。

    背景資料:從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)

@echo off

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文件的內容如下:

<?xml version="1.0" encoding="gb2312"?>
<VisualStudioPropertySheet
    
ProjectType="Visual C++"
    Version
="8.00"
    Name
="StepByStep"
    OutputDirectory
="$(OUTPUT)"
    IntermediateDirectory
="$(INTERMEDIATE)"
    
>
    
<Tool
        
Name="VCPostBuildEventTool"
        CommandLine
="copy $(OUTPUT)*.dll $(BIN)&#x0D;&#x0A;copy $(OUTPUT)*.exe $(BIN)&#x0D;&#x0A;copy $(OUTPUT)*.lib $(LIB)&#x0D;&#x0A;"
    
/>
</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文件夾內的文件打包即可。
    其實,上面的例子只是一個很小的解決方案。在一些中型或者大型的軟件開發過程中,解決方案肯定比這個要龐大很多,相關的目錄結構和配置也會複雜很多,那樣就更能體現出上面的方法和步驟的優點。 

發佈了6 篇原創文章 · 獲贊 31 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章