鄒城網(wǎng)站制作識(shí)圖搜索在線 照片識(shí)別
一步一步創(chuàng)建VC2008解決方案
??? 現(xiàn)在軟件開(kāi)發(fā)已經(jīng)告別了“獨(dú)行俠”的年代,而是以團(tuán)隊(duì)開(kāi)發(fā)為主。一般情況下,一個(gè)解決方案都會(huì)包含多個(gè)項(xiàng)目,比如:其中一些是靜態(tài)庫(kù)項(xiàng)目,一些是動(dòng)態(tài)庫(kù)項(xiàng) 目,當(dāng)然還會(huì)有應(yīng)用程序項(xiàng)目。另外,根據(jù)需要,還可能會(huì)使用一些第三方庫(kù)。因此為解決方案設(shè)置一個(gè)合理的目錄結(jié)構(gòu)并配合一定的環(huán)境變量,不但可以使得代碼 管理更井井有條,項(xiàng)目成員之間也更容易相互配合,更重要的是能夠使得最終應(yīng)用程序的安裝包制作,源代碼打包發(fā)布和轉(zhuǎn)移變得十分容易。
??? 背景資料: 從VC6之后VC就使用解決方案(Solution)來(lái)替代原來(lái)的工作空間,用于組織和管理多個(gè)相關(guān)的項(xiàng)目(Project)。
??? 下面就以一個(gè)例子來(lái)說(shuō)明怎樣一步一步的創(chuàng)建一個(gè)VC2005解決方案。
??? 比如該方案名為StepByStep。里面共有3個(gè)工程:應(yīng)用程序工程EXE,靜態(tài)庫(kù)工程LIB,和動(dòng)態(tài)庫(kù)工程DLL。另外還要用到第三方的庫(kù)。
??? 第一步,為解決方案設(shè)計(jì)目錄結(jié)構(gòu)
??? 1. SetpBySetp是解決方案目錄
??? 2. Bin是存放最終可發(fā)布的生成文件的文件夾
??? 3. Config文件夾內(nèi)存放配置文件
??? 4. Lib內(nèi)是存放所有的.lib文件(lib文件夾內(nèi))和使用庫(kù)文件所需的頭文件(inc文件夾內(nèi))
??? 5. Source內(nèi)是所有工程的源代碼
??? 6. Temp是臨時(shí)文件夾,存放中間文件(Intermediate)和輸出文件(Output文件夾)
??? 第二步,為解決方案編寫(xiě)啟動(dòng)批處理文件(.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個(gè)部分:
??? 1. 設(shè)置虛擬盤(pán)
??? 文件中是把D:/StarLee設(shè)置成了虛擬盤(pán)S:,這樣做的好處是可以方便的訪問(wèn)解決方案中的各個(gè)文件,便于管理。
??? 背景資料:subst命令可以將一個(gè)目錄設(shè)置為一個(gè)虛擬盤(pán)。詳細(xì)信息可以參照subst的幫助信息。
??? 2. 設(shè)置環(huán)境變量
??? 在這里設(shè)置的環(huán)境變量會(huì)在工程的屬性設(shè)置中用到。
??? 3. 啟動(dòng)解決方案
??? 調(diào)用VS的devenv來(lái)在VS的IDE里面打開(kāi)解決方案。
???
??? 使用方法:
??? 在開(kāi)始菜單中打開(kāi)“Microsoft Visual Studio 2005”,選擇“Visual Studio Tools”,點(diǎn)擊“Visual Studio 2005 Command Prompt”,然后在彈出的Command窗口中執(zhí)行該批處理文件,就可以直接在VS的IDE里面打開(kāi)解決方案。
??? 在軟件開(kāi)發(fā)的時(shí)候,一般都會(huì)使用版本控制程序(如VSS,Perforce等)來(lái)對(duì)源代碼進(jìn)行管理,代碼以及目錄結(jié)構(gòu)都會(huì)存放在服務(wù)器上。如果目錄結(jié)構(gòu)需 要改變,那么針對(duì)每個(gè)客戶端上的開(kāi)發(fā)者來(lái)說(shuō),重新構(gòu)建開(kāi)發(fā)目錄結(jié)構(gòu)是一個(gè)很麻煩的事情。而有了上面這個(gè)批處理文件,一切都變的容易了,只要修改這個(gè)批處理 文件中的環(huán)境變量就行了。每個(gè)開(kāi)發(fā)人員都可以根據(jù)自己的情況來(lái)修改文件中第一部分的VIRTUALDIRVE和REALPATH,再加上后面兩步中的方 法,就可以避免重新構(gòu)建開(kāi)發(fā)目錄。
??? 第三步,為解決方案創(chuàng)建一個(gè)Project Property Sheet
??? 1. 在VS的IDE菜單中選擇“View”,然后選擇“Property Manager”。
??? 2. 在Property Manager中用向?qū)?chuàng)建一個(gè)Project Property Sheet。將創(chuàng)建出的Project Propery Sheet存放在Config文件夾內(nèi)(本例中該文件為StepByStep.vsprops)。
??? 3. 編輯“Gerneral”選項(xiàng)頁(yè)中的“Output Directory”和“Intermediate Directory”屬性。分別輸入$(OUTPUT)和$(INTERMEDIATE) 。
??? 4. 編輯“Post-Build Event”選項(xiàng)頁(yè)中的“Command Line”屬性。輸入下面的命令:
copy $(OUTPUT)/*.dll $(BIN)
copy $(OUTPUT)/*.exe $(BIN)
copy $(OUTPUT)/*.lib $(LIB)
??? 5. 保存Project Property Sheet。
??? 這里用到了在第二步中的批處理文件里面創(chuàng)建的環(huán)境變量。如果目錄結(jié)構(gòu)改變,只要修改批處理文件即可,不需要修改項(xiàng)目文件。
??? Project Property Sheet其實(shí)就是一個(gè)項(xiàng)目屬性模板。
??? 一個(gè)解決方案中的各個(gè)項(xiàng)目的屬性設(shè)置中有很多都是相同的,可以把這些相同的屬性都存放在一個(gè)Project Property Sheet里,然后讓每個(gè)項(xiàng)目中這些相同的屬性繼承自這個(gè)Project Property Sheet。那樣當(dāng)這些相同的屬性需要改變的時(shí)候,只要改變Project Property Sheet文件就行了,而不用一個(gè)一個(gè)項(xiàng)目的改變。而且,一個(gè)Project Property Sheet還可以從另外一個(gè)Project Property Sheet繼承。這跟面向?qū)ο笾蓄惖睦^承是一樣的。
??? 其實(shí),Project Property Sheet對(duì)應(yīng)的.vsprops就是一個(gè)XML文件。本例中StepByStep.vsprops文件的內(nèi)容如下:
< 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 >
??? 第四步,讓解決方案中的各個(gè)項(xiàng)目屬性從Project Property Sheet繼承
??? 1. 打開(kāi)項(xiàng)目的屬性頁(yè),將“Configuration”改為“All Configurations”,以使屬性的修改對(duì)所有配置都有效。在“Inherited Project Property Sheet”中輸入$(CONFIG)/StepByStep.vsprops 。
??? 2. 選擇要從Project Property Sheet繼承的屬性,在下拉框中選擇“<inherit from parent or project defaults>”,然后點(diǎn)擊“Apply”按鈕就行了。
??? 通過(guò)上面四步,就創(chuàng)建了一個(gè)完整的,有合理目錄的,非常便于管理的VC2005解決方案。在需要發(fā)布的時(shí)候,只要在Release配置下進(jìn)行編譯,然后將Bin文件夾內(nèi)的文件打包即可。
??? 其實(shí),上面的例子只是一個(gè)很小的解決方案。在一些中型或者大型的軟件開(kāi)發(fā)過(guò)程中,解決方案肯定比這個(gè)要龐大很多,相關(guān)的目錄結(jié)構(gòu)和配置也會(huì)復(fù)雜很多,那樣就更能體現(xiàn)出上面的方法和步驟的優(yōu)點(diǎn)。