2013-10-27 23 views
0

我有一個問題,有多大的C++項目應該被管理(我猜是最好的)。對於所有的意圖和目的,我是一個開始的程序員。我理解編譯,頭文件等的基礎知識,但是我從來沒有做過比家庭作業更重要的任何事情。所以,讓我們來看看像遊戲引擎那樣的各種組件,比如內存管理器,渲染器,物理仿真等等。如何分別對這些組件進行處理,但是通過一種方式可以很容易地將其整合到整體中?例如,你會爲每件作品分別製作一個獨立的視覺工作室項目嗎?如果你有一個大項目,你會如何處理一個組件,而不會有另一個未完成的組件,從而導致每次編譯失敗?我覺得我錯過了一些重要的概念。比如,對於有多個程序員的項目,他們必須檢查部分工作...他們是否抓住所有代碼以便編譯,或者他們是否設置了自己的臨時項目來處理他們的工作?這兩個選項聽起來都錯你必須有一個主要功能來編譯正確嗎?如何將大型C++項目的組件組合起來?

我非常感謝任何人教育我關於這個話題,因爲我覺得這是我應該有的東西,只是完全錯過了。

+0

你不是說你已經知道頭文件嗎? :) – Sarien

+0

我做到了,但顯然我不......至少在這種情況下。請隨時啓發我。 – Morgan

回答

1

當你在處理較大的程序時,習慣上有一個帶有主程序的源文件,其餘的(可以有多個源文件)從main中調用。那麼你需要一個構建策略。您可以編寫一個腳本文件來編譯每個源文件,然後將它們鏈接在一起。不幸的是,這可能導致編譯時間過長,所以專業程序員使用make文件,這些文件只重建改變的文件。 作爲進一步的改進,您可以將多組源組織到庫中,並分別構建這些庫,然後將它們與剩餘的已編譯源文件相鏈接。

嘗試查找gmake(for linux)以查看如何構建大型項目。我猜你正在使用Microsoft VC++,在這種情況下,編譯的文件具有.obj擴展名和庫.lib擴展名。微軟有自己的構建庫的方式,比使用gmake要複雜得多。

當您看得更遠時,您會遇到共享庫(Windows上的動態鏈接庫 - DLL)。

+0

非常感謝這些信息,我會研究圖書館和製作文件。 – Morgan

+0

微軟有自己的方式來構建更大的項目 - 這是集成到Visual Studio中。在Linux和MacOS上,我們使用gmake來構建更大的程序。如果你想試用gmake,你可以在Windows上安裝MinGW(或codeblocks)。我在我的網站seddon-software.co.uk上有很多gmake例子。附:如果你喜歡答案,請投票給它 – resigned

0

這對堆棧溢出格式並不是一個很好的問題。 C++確實支持用於管理大型代碼庫的語言工具,如命名空間,類和頭文件。但是你的問題似乎表明對於它們的用途缺乏透視,或者對於爲軟件項目提供代碼的技術框架和流程有限的理解。這不是一個特定於C++的問題。

在生活項目中工作時,主要關心的是處理複雜性。或者換句話說,減少在任何一個時間點你必須考慮的事情的數量。這意味着如果另一位程序員正在使用用戶界面,理想情況下,物理引擎中的代碼不必更改以反映這些更改。因此,形成抽象和隱藏信息的接口是必不可少的。

當然,我也很綠,所以我不能給出任何真正可靠的建議。我只是提到這一點,以便對你的問題有多清晰。如果我正確理解你的問題,你可能會喜歡像McConnell的Code Complete 2這樣的書。

+0

謝謝,我會檢查出來的書。 – Morgan

0

大型項目被分成幾塊。通常情況下,你應該有能力分別編譯每一部分。我所知道的最佳實踐是在各個組件之間聲明接口,儘可能地將依賴關係儘量減少到零,然後構建「測試」程序,這些程序很小,有兩個原因:測試一小段代碼,讓main ()。 目錄結構通常是:

yourlib/ 
    lib/ 
    ext-inc/ 
    test/ 
    other dirs/ 
    ... 

的lib包含輸出庫對象(.A,。所以) 的EXT-lib包含標頭外部代碼將使用(有時被稱爲「公共」,或只是「INC ') 測試目錄通常有一個main.c(cpp)文件,根據需要可能還有更多。

當您結帳(svn)/克隆(git)/同步(p4)/等等時,您將採取一切行動,但僅適用於您的區域。一旦完成,您將您的更改合併/提交到主分支。

+0

摩根並不瞭解庫,所以最好不要在這一點上介紹GIT,SVN,Perforce等,儘管這些都很重要。他們可以晚點來。 – resigned

+0

這可能對於OP來說有點高級並且有點過時,但John Lakos的** Large Scale C++軟件設計**有很多很好的建議。 – user888379