版 本 控 制
<col>
版本号
日期
修改者
說明
備注
0.1
2010.07.13
phoenix
0.2
2011.01.12
目 錄
1. 引言... 1
1.1. 編寫目的.. 1
1.2. 參考資料.. 1
2. 目錄結構... 1
3. 工程配置... 2
4. 屬性配置... 2
4.1. “正常”配置.. 2
4.2. “調試”配置.. 2
4.3. “c/c++”配置.. 3
4.4. “連結器”配置.. 3
4.5. “生成事件”配置.. 3
5. 附錄:vc2005中可以使用的宏... 3
當開發人員開始進行編碼工作以及編碼工作的過程中,都需要根據工程的需要配置各種工作路徑,如引入第三方庫、輸出生成的頭檔案和庫檔案等。以前部分開發人員對工程路徑的定義比較随意,相當一部分使用的是絕對路徑。如果隻是單個開發人員完成一個單一的功能,這種做法看起來沒有什麼明顯的缺點。但是,如
果是數個開發人員來合作共同完成一個功能和結構都很複雜的工程時,這種做法的弊端就凸顯出來。一個非常明顯的問題就是:開發人員a将他的工程交給開發人員
b編譯時,如工程定義使用了絕對路徑,除非開發人員b的計算機與a的計算機具有完全相同的檔案組織結構,否則一次性編譯通過是不可能。另外,當開發人員在
一長串的“can’t find …”或者“xxx
undefined”的錯誤與警告中焦頭爛額時,也許隻是因為一個不起眼的地方使用了絕對路徑,或者是大小寫的差異。
是以,規範開發人員的工程配置是很有必要的。通過規範的工程配置,所有開發人員之間的工程是無縫銜接的,即任何一個開發人員的工程拿到其他人的工程時,無須修改任何一個配置便可以一次性的編譯成功。這樣的規範操作無異可以大大減少團隊成員通過代碼交流時的不必要成本。另外,規範的工程配置也便于
subversion版本控制系統的引入,通過引入subversion版本控制系統,可以協調整個研發團隊的工程進度,控制産品的裡程碑釋出。這一切,
都從規範的工程配置開始。
1. 《opensource subversion規範》
2. 《visual studio 2005程式設計指南》
mydevelopefolder
├─bin
│ ├─debug
│ ├─program
│ ├─release
│ ├─unicodedebug
│ ├─unicodeprogram
│ └─unicoderelease
├─mysdk
│ ├─include
│ │ ├─bcg
│ │ └─boost
│ └─lib
│ ├─bcg
│ └─boost
├─project
│ ├─libmyexample
│ │ └─document
│ └─myexampleapp
│ └─document
├─solution
└─temp
├─compile
└─link
1. mydevelopefolder是開發工程的根目錄
2. bin目錄存放所有動态連結庫和可執行程式,包括自己的産出和第三方庫,按編譯配置名稱包括對應的子目錄,如debug、release。另外,程式運作過程中需要外部的資料檔案和啟動時需要的配置檔案等等都可放于該目錄
3. mysdk存放産品項目依賴、産出的.h檔案和.lib檔案。其中lib目錄下根據配置名稱和第三方庫名稱對lib檔案進行管理。如某項目使用bcg作為界面庫,則bcg的頭檔案放置于“include\bcg”下,不同版本的庫檔案置于“lib\配置名\bcg”下;項目輸出
的lib檔案直接位于“lib\配置名”下。這樣産品依賴的不同開發庫所使用頭檔案與庫檔案和輸出的頭檔案與庫檔案互相之間是獨立、彼此不幹涉的。
4. project是工程目錄,用于存放代碼,按子產品名組織次級目錄。功能庫工程一般的以“lib”開頭,以便與其它動态庫差別。每個工程子產品目錄應包含
“document”子目錄,該目錄下按需要增加“dbm”、“doc”、“uml”三個子目錄。“dbm”用于存放與該子產品相關的資料庫設計文檔,通常
是powerdesigner文檔;“doc”用于存放與該子產品相關的一般性說明文檔;“uml”用于存放與該子產品相關的uml設計文檔,通常是
rational rose文檔。
5. solution是解決方案目錄,用于存放産品的完整解決方案。通常使用解決方案可以生成該産品的所有版本。
6. temp是用于編譯生成的中間目錄,主要存放編譯過程中生成的各種中間檔案。
根據調試資訊與字元集的不同,一般的工程配置有六類,如下表所示
名稱
字元集
是否包含調試資訊
是否包含代碼優化
debug
ansi
yes
no
release
program
unicodedebug
unicode
unicoderelease
unicodeprogram
輸出目錄: ..\..\temp\link\$(projectname)\$(configurationname)
中間目錄:..\..\temp\compile\$(projectname)\$(configurationname)
如果需要啟動本子產品進行調試,則“指令”為:..\..\bin\$(configurationname)\$(targetfilename)
1) “附加包含目錄”:..\..\minesdk\include ,如有其它目錄請用“;”間隔,注意使用相對路徑,嚴禁使用絕對路徑。
2) 動态庫使用導出宏導出/導入時,應在“預處理器”中定義導出宏,不得在代碼檔案中定義。導出宏的一般格式為“lib_xxxxx”。
3) 一般情況下不推薦使用預編譯頭。
1) “輸出檔案”:
a) 若為debug版時:$(outdir)\$(projectname)d.dll;
b) 若為release版時:$(outdir)\$(projectname).dll。
2) “附加庫目錄”:..\..\bin\$(configurationname);..\..\mysdk\lib,如有其它目錄請用“;”間隔,注意使用相對路徑,嚴格禁止使用本地絕對路徑。
3) “子產品定義檔案”:一般不使用子產品定義.def檔案,本項可選擇“從預設配置…”。
一般需要配置的是“生成後事件”。任何一個工程子產品的生成後事件都應包括以下内容:
1) copy $(targetpath) ..\..\bin\$(configurationname)
2) 若有導出的lib庫檔案,需要增加:copy $(targetdir)$(targetname).lib ..\..\mysdk\lib
3) 若有導出的頭檔案,需要增加: copy myhead.h ..\..\mysdk\include
具體檔案名與路徑視情況而定,但是嚴禁使用絕對路徑。
configurationname
配置名字,通常是debug或者release
intdir
編譯器使用的中間目錄,産出obj檔案
outdir
連結器使用的輸出目錄
projectdir
項目目錄
projectname
項目名字
solutiondir
解決方案目錄
targetdir
目标輸出檔案所在的目錄
targetext
目标輸出的擴充名
targetfilename
目标輸出檔案名,包括擴充名
targetname
目标輸出名,不包括擴充名
targetpath
目标輸出檔案的全路徑名
分類: 開發管理