• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            平凡的世界

            神鷹忽展翅,頭頂青天飛
            隨筆 - 10, 文章 - 0, 評(píng)論 - 34, 引用 - 0
            數(shù)據(jù)加載中……

            軟件工程配置規(guī)范(VC2005) 第二版

            版本號(hào)

            日期

            修改者

            說(shuō)明

            備注

            0.1

            2010.07.13

            phoenix

               

            0.2

            2011.01.12

            phoenix

               
                     
                     
                     


            目 錄

            1. 引言... 1

            1.1. 編寫(xiě)目的.. 1

            1.2. 參考資料.. 1

            2. 目錄結(jié)構(gòu)... 1

            3. 工程配置... 2

            4. 屬性配置... 2

            4.1. “常規(guī)”配置.. 2

            4.2. “調(diào)試”配置.. 2

            4.3. “C/C++”配置.. 3

            4.4. “鏈接器”配置.. 3

            4.5. “生成事件”配置.. 3

            5. 附錄:VC2005中可以使用的宏... 3

            1.引言

            1.1.編寫(xiě)目的

            當(dāng)開(kāi)發(fā)人員開(kāi)始進(jìn)行編碼工作以及編碼工作的過(guò)程中,都需要根據(jù)工程的需要配置各種工作路徑,如引入第三方庫(kù)、輸出生成的頭文件和庫(kù)文件等。以前部分開(kāi)發(fā)人員對(duì)工程路徑的定義比較隨意,相當(dāng)一部分使用的是絕對(duì)路徑。如果只是單個(gè)開(kāi)發(fā)人員完成一個(gè)單一的功能,這種做法看起來(lái)沒(méi)有什么明顯的缺點(diǎn)。但是,如果是數(shù)個(gè)開(kāi)發(fā)人員來(lái)合作共同完成一個(gè)功能和結(jié)構(gòu)都很復(fù)雜的工程時(shí),這種做法的弊端就凸顯出來(lái)。一個(gè)非常明顯的問(wèn)題就是:開(kāi)發(fā)人員A將他的工程交給開(kāi)發(fā)人員B編譯時(shí),如工程定義使用了絕對(duì)路徑,除非開(kāi)發(fā)人員B的計(jì)算機(jī)與A的計(jì)算機(jī)具有完全相同的文件組織結(jié)構(gòu),否則一次性編譯通過(guò)是不可能。另外,當(dāng)開(kāi)發(fā)人員在一長(zhǎng)串的“Can’t find …”或者“XXX undefined”的錯(cuò)誤與警告中焦頭爛額時(shí),也許只是因?yàn)橐粋€(gè)不起眼的地方使用了絕對(duì)路徑,或者是大小寫(xiě)的差異。

            因此,規(guī)范開(kāi)發(fā)人員的工程配置是很有必要的。通過(guò)規(guī)范的工程配置,所有開(kāi)發(fā)人員之間的工程是無(wú)縫銜接的,即任何一個(gè)開(kāi)發(fā)人員的工程拿到其他人的工程時(shí),無(wú)須修改任何一個(gè)配置便可以一次性的編譯成功。這樣的規(guī)范操作無(wú)異可以大大減少團(tuán)隊(duì)成員通過(guò)代碼交流時(shí)的不必要成本。另外,規(guī)范的工程配置也便于SubVersion版本控制系統(tǒng)的引入,通過(guò)引入SubVersion版本控制系統(tǒng),可以協(xié)調(diào)整個(gè)研發(fā)團(tuán)隊(duì)的工程進(jìn)度,控制產(chǎn)品的里程碑發(fā)布。這一切,都從規(guī)范的工程配置開(kāi)始。

            1.2.參考資料

            1. 《OpenSource SubVersion規(guī)范》

            2. 《Visual Studio 2005編程指南》

            2.目錄結(jié)構(gòu)

            MyDevelopeFolder

            ├─Bin

            │ ├─Debug

            │ ├─Program

            │ ├─Release

            │ ├─UnicodeDebug

            │ ├─UnicodeProgram

            │ └─UnicodeRelease

            ├─MySDK

            │ ├─Include

            │ │ ├─BCG

            │ │ └─Boost

            │ └─Lib

            │ ├─Debug

            │ │ ├─BCG

            │ │ └─Boost

            │ ├─Program

            │ │ ├─BCG

            │ │ └─Boost

            │ ├─Release

            │ │ ├─BCG

            │ │ └─Boost

            │ ├─UnicodeDebug

            │ │ ├─BCG

            │ │ └─Boost

            │ ├─UnicodeProgram

            │ │ ├─BCG

            │ │ └─Boost

            │ └─UnicodeRelease

            │ ├─BCG

            │ └─Boost

            ├─Project

            │ ├─LibMyExample

            │ │ └─Document

            │ └─MyExampleApp

            │ └─Document

            ├─Solution

            └─Temp

            ├─Compile

            └─Link

            1. MyDevelopeFolder是開(kāi)發(fā)工程的根目錄

            2. Bin目錄存放所有動(dòng)態(tài)鏈接庫(kù)和可執(zhí)行程序,包括自己的產(chǎn)出和第三方庫(kù),按編譯配置名稱(chēng)包括對(duì)應(yīng)的子目錄,如Debug、Release。另外,程序運(yùn)行過(guò)程中需要外部的數(shù)據(jù)文件和啟動(dòng)時(shí)需要的配置文件等等都可放于該目錄

            3. MySDK存放產(chǎn)品項(xiàng)目依賴(lài)、產(chǎn)出的.h文件和.lib文件。其中Lib目錄下根據(jù)配置名稱(chēng)和第三方庫(kù)名稱(chēng)對(duì)lib文件進(jìn)行管理。如某項(xiàng)目使用BCG作為界面庫(kù),則BCG的頭文件放置于“Include\BCG”下,不同版本的庫(kù)文件置于“Lib\配置名\BCG”下;項(xiàng)目輸出的lib文件直接位于“Lib\配置名”下。這樣產(chǎn)品依賴(lài)的不同開(kāi)發(fā)庫(kù)所使用頭文件與庫(kù)文件和輸出的頭文件與庫(kù)文件相互之間是獨(dú)立、彼此不干涉的。

            4. Project是工程目錄,用于存放代碼,按模塊名組織次級(jí)目錄。功能庫(kù)工程一般的以“Lib”開(kāi)頭,以便與其它動(dòng)態(tài)庫(kù)區(qū)別。每個(gè)工程模塊目錄應(yīng)包含“Document”子目錄,該目錄下按需要增加“DBM”、“DOC”、“UML”三個(gè)子目錄。“DBM”用于存放與該模塊相關(guān)的數(shù)據(jù)庫(kù)設(shè)計(jì)文檔,通常是PowerDesigner文檔;“DOC”用于存放與該模塊相關(guān)的一般性說(shuō)明文檔;“UML”用于存放與該模塊相關(guān)的UML設(shè)計(jì)文檔,通常是Rational Rose文檔。

            5. Solution是解決方案目錄,用于存放產(chǎn)品的完整解決方案。通常使用解決方案可以生成該產(chǎn)品的所有版本。

            6. Temp是用于編譯生成的中間目錄,主要存放編譯過(guò)程中生成的各種中間文件。

            3.工程配置

            根據(jù)調(diào)試信息與字符集的不同,一般的工程配置有六類(lèi),如下表所示

            名稱(chēng)

            字符集

            是否包含調(diào)試信息

            是否包含代碼優(yōu)化

            Debug

            ANSI

            YES

            NO

            Release

            ANSI

            YES

            YES

            Program

            ANSI

            NO

            YES

            UnicodeDebug

            UNICODE

            YES

            NO

            UnicodeRelease

            UNICODE

            YES

            YES

            UnicodeProgram

            UNICODE

            NO

            YES

            4.屬性配置

            4.1.“常規(guī)”配置

            輸出目錄: ..\..\Temp\Link\$(ProjectName)\$(ConfigurationName)

            中間目錄:..\..\Temp\Compile\$(ProjectName)\$(ConfigurationName)

            4.2.“調(diào)試”配置

            如果需要啟動(dòng)本模塊進(jìn)行調(diào)試,則“命令”為:..\..\Bin\$(ConfigurationName)\$(TargetFileName)

            4.3.“C/C++”配置

            1) “附加包含目錄”:..\..\MineSDK\Include ,如有其它目錄請(qǐng)用“;”間隔,注意使用相對(duì)路徑,嚴(yán)禁使用絕對(duì)路徑

            2) 動(dòng)態(tài)庫(kù)使用導(dǎo)出宏導(dǎo)出/導(dǎo)入時(shí),應(yīng)在“預(yù)處理器”中定義導(dǎo)出宏,不得在代碼文件中定義。導(dǎo)出宏的一般格式為“LIB_XXXXX”。

            3) 一般情況下不推薦使用預(yù)編譯頭。

            4.4.“鏈接器”配置

            1) “輸出文件”:

            a) 若為Debug版時(shí):$(OutDir)\$(ProjectName)D.dll;

            b) 若為Release版時(shí):$(OutDir)\$(ProjectName).dll。

            2) “附加庫(kù)目錄”:..\..\Bin\$(ConfigurationName);..\..\MySDK\Lib,如有其它目錄請(qǐng)用“;”間隔,注意使用相對(duì)路徑,嚴(yán)格禁止使用本地絕對(duì)路徑。

            3) “模塊定義文件”:一般不使用模塊定義.def文件,本項(xiàng)可選擇“從默認(rèn)配置…”。

            4.5.“生成事件”配置

            一般需要配置的是“生成后事件”。任何一個(gè)工程模塊的生成后事件都應(yīng)包括以下內(nèi)容:

            1) copy $(TargetPath) ..\..\Bin\$(ConfigurationName)

            2) 若有導(dǎo)出的Lib庫(kù)文件,需要增加:copy $(TargetDir)$(TargetName).lib ..\..\MySDK\Lib

            3) 若有導(dǎo)出的頭文件,需要增加: copy myhead.h ..\..\MySDK\Include

            具體文件名與路徑視情況而定,但是嚴(yán)禁使用絕對(duì)路徑。

            5.附錄:VC2005中可以使用的宏

            ConfigurationName

            配置名字,通常是Debug或者Release

            IntDir

            編譯器使用的中間目錄,產(chǎn)出obj文件

            OutDir

            鏈接器使用的輸出目錄

            ProjectDir

            項(xiàng)目目錄

            ProjectName

            項(xiàng)目名字

            SolutionDir

            解決方案目錄

            TargetDir

            目標(biāo)輸出文件所在的目錄

            TargetExt

            目標(biāo)輸出的擴(kuò)展名

            TargetFileName

            目標(biāo)輸出文件名,包括擴(kuò)展名

            TargetName

            目標(biāo)輸出名,不包括擴(kuò)展名

            TargetPath

            目標(biāo)輸出文件的全路徑名

            posted on 2011-04-03 18:58 西門(mén)有悔 閱讀(2173) 評(píng)論(6)  編輯 收藏 引用

            評(píng)論

            # re: 軟件工程配置規(guī)范(VC2005) 第二版  回復(fù)  更多評(píng)論   

            希望可以放出pdf版,這樣方便使用……
            2011-04-03 20:19 | 御用軟件

            # re: 軟件工程配置規(guī)范(VC2005) 第二版  回復(fù)  更多評(píng)論   

            個(gè)人非常討厭什么 bin,source,solution,。。。
            你要么就純粹自己搞,bin、source 都可以,就別 solution、project 了,最后自己寫(xiě)腳本
            要么就用 solution、project,目錄就大體上按默認(rèn)的,一個(gè)project一個(gè)目錄,
            既用 solution、project,又獨(dú)立搞一套目錄體系,然后修改一大堆純粹關(guān)于目錄的配置參數(shù),何必呢
            2011-04-03 21:52 | 溪流

            # re: 軟件工程配置規(guī)范(VC2005) 第二版  回復(fù)  更多評(píng)論   

            @溪流
            1.Bin里是所有生成的文件,包含了程序可以運(yùn)行的最小資源,產(chǎn)品發(fā)布人員只需要將Bin里的文件打包就可以生成安裝文件。而默認(rèn)的配置會(huì)在bin目錄里生成程序調(diào)試數(shù)據(jù)庫(kù)等一些非運(yùn)行時(shí)需要的文件。Bin是面向產(chǎn)品測(cè)試與發(fā)布人員的,開(kāi)發(fā)人員只是將dll和exe輸出到bin中進(jìn)行調(diào)試。這樣使產(chǎn)品開(kāi)發(fā)與產(chǎn)品測(cè)試、發(fā)布分開(kāi)。
            2.Project與Solution分開(kāi)是因?yàn)槊總€(gè)成員都是獨(dú)立地開(kāi)發(fā)一個(gè)或幾個(gè)Project的,他把Bin與SDK從SVN上checkout出來(lái),就可以進(jìn)行自己的代碼編寫(xiě),而不必關(guān)心與其他開(kāi)發(fā)人員所同時(shí)進(jìn)行的project的依賴(lài)關(guān)系。Solution里包含的是整個(gè)產(chǎn)品的所有project以及project之間的依賴(lài)關(guān)系。打開(kāi)solution就可以生成一個(gè)完整的產(chǎn)品到bin里,而且bin里沒(méi)有任何多余的文件。

            效果:采用了這套工程配置方法,整個(gè)團(tuán)隊(duì)代碼與工程層面的交流明顯順暢多了,再也沒(méi)有出現(xiàn)拿到別人的工程半天build不過(guò)的問(wèn)題。而且開(kāi)發(fā)與測(cè)試、發(fā)布之間的卸接也很順利。開(kāi)發(fā)人員每天都build后commit到svn。每周一開(kāi)發(fā)部產(chǎn)品管理員用solution生成一個(gè)完成的bin并整理出track后發(fā)布到Svn上,測(cè)試人員用本周一的bin進(jìn)行測(cè)試,到了Tag的時(shí)間點(diǎn)測(cè)試部產(chǎn)品管理員將bin打包成安裝程序發(fā)布到svn上并通知實(shí)施部門(mén)有更新版本。形成一個(gè)完整的流程。再用bugzilla與dotproject對(duì)產(chǎn)品的bug和人員進(jìn)行管理。

            總結(jié):這套工程配置應(yīng)該算是不依賴(lài)于第三方工具,進(jìn)行基于Svn的代碼管理以及多個(gè)開(kāi)發(fā)人員之間的合作開(kāi)發(fā)。如果是一個(gè)人,或者project不多的時(shí)候就沒(méi)必要如此復(fù)雜。而且修改工程配置是一次的,不需要每次都修改。可以說(shuō)一勞永逸。

            謝謝你的評(píng)論。
            2011-04-04 00:43 | 西門(mén)有悔

            # re: 軟件工程配置規(guī)范(VC2005) 第二版  回復(fù)  更多評(píng)論   

            1、打包人員不該偷懶,他們應(yīng)該知道完整的精確的文件清單,而不僅僅是“某個(gè)目錄下的所有文件”
            2、還是沒(méi)有看出來(lái)把solution單獨(dú)藏在一個(gè)目錄的用意。
            2011-04-04 11:58 | 溪流

            # re: 軟件工程配置規(guī)范(VC2005) 第二版[未登錄](méi)  回復(fù)  更多評(píng)論   

            可參考 chrome 或者 svn烏龜 等開(kāi)源項(xiàng)目的目錄組織,
            我們都是每天自動(dòng)構(gòu)建, 自動(dòng)生成安裝包等
            2011-04-06 08:56 | chentan

            # re: 軟件工程配置規(guī)范(VC2005) 第二版  回復(fù)  更多評(píng)論   

            @溪流
            打包人員不該偷懶,他們應(yīng)該知道完整的精確的文件清單,而不僅僅是“某個(gè)目錄下的所有文件”

            他們通常不知道 你也很難讓他們知道
            2011-04-07 12:44 | houwukong

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            亚洲国产成人久久综合区| 国产成人精品综合久久久| 久久人人爽人人爽人人爽 | 漂亮人妻被黑人久久精品| 国产麻豆精品久久一二三| 久久国产成人午夜aⅴ影院| 久久久久亚洲国产| 精品久久久久久国产91| 久久综合视频网| 久久99中文字幕久久| 欧美成人免费观看久久| 国产∨亚洲V天堂无码久久久 | 色综合久久久久| 狠狠色丁香婷婷久久综合| 久久精品国产免费一区| 久久大香萑太香蕉av| 久久免费国产精品一区二区| 久久人人青草97香蕉| 99热热久久这里只有精品68| 日韩人妻无码一区二区三区久久 | 亚洲午夜久久影院| 嫩草伊人久久精品少妇AV| 久久久久亚洲精品天堂久久久久久| 麻豆成人久久精品二区三区免费| 亚洲欧美日韩精品久久亚洲区| 久久精品国产99国产精品澳门 | 久久精品成人| 伊人色综合久久天天| 亚洲av成人无码久久精品| 武侠古典久久婷婷狼人伊人| 伊人久久综在合线亚洲2019| 久久精品国产精品青草| 欧美久久精品一级c片片| 国产成人无码久久久精品一| 人妻无码αv中文字幕久久琪琪布| 中文字幕久久亚洲一区| 欧美日韩成人精品久久久免费看 | 久久国产视频网| 精品免费久久久久国产一区| 久久精品中文字幕有码| 欧美精品九九99久久在观看|