2013-06-05 41 views
0

語境:C語言,8位微處理器什麼是用C通用代碼複用策略

我們已經確定了可以在項目(產品)之間重複使用的組件。但我無法找到哪個處理可重用組件的最佳基礎架構。

兩種可能性,我發現到現在:在顛覆

  • 靜態庫
  • 共享文件
+0

這裏的明顯差異 - 源代碼級別共享和對象級別共享 - 並不是那麼好。也就是說,詢問哪種替代品最好的問題通常不適合SO格式。 –

回答

1

在我的公司,我們使用在同一時間兩種方法:

  • 我們做兩次檢出:一個項目,其他爲庫。
  • 當項目需要編譯(通過Makefile),我們首先編譯庫。
  • 然後鏈接該庫,就好像它是一個只有二進制文件的庫。
  • 當我們發佈一個項目時,我們檢查其他項目是否仍然針對新庫進行編譯。
  • 當我們發佈一個項目時,我們將該庫與該項目一起標記。

這樣你得到兩全其美:

  • 公共代碼共享:所有項目從錯誤修復和改進中獲益
  • 源代碼始終是完全可以理解和調試
  • 源代碼的可用性鼓勵庫維護(固定裝置,改進和實驗)
  • 圖書館界判處更API樣的方法:更清晰的界面和項目嵌入
  • 你可以通過編譯時間標誌到圖書館建立一個不同的口味
  • 如果需要的話,而不庫VS-項目不匹配,你可以隨時回到過去的麻煩
  • ,如果你是在趕時間,你可以推遲圖書館檢查。

這種方法的唯一缺點是開發人員不知道他們在做什麼。如果他們修改圖書館,他們應該知道這一變化將影響到所有項目。但是,您已經在使用版本控制系統,並且如果您使用分支機構並且團隊內部的溝通很好,那麼應該沒有任何問題。

+0

謝謝,它幫助我很多。我只想知道你如何管理圖書館的版本?在發佈的那一刻你會標記它?或者您生成存儲在某處的二進制文件? –

+0

在你的問題中還有其他的東西我想念你。 Devolus在第1點和第2點提到了一些非常重要的事情。你是如何解決這些問題的? –

+0

我發現了一篇有趣的論文,他們描述了與預處理器http://wwwiti.cs.uni-magdeburg.de/iti_db/publikationen/ps/10/diss_kaestner.pdf分離問題的方法。他們提到了一些有趣的工具,如http://wwwiti.cs.uni-magdeburg.de/iti_db/research/cide/ –

4

共享庫和共享源代碼,讓大家分享項目中的公共代碼。圖書館提供了更好的兩種選擇,所以你應該在平臺上使用它們。這樣可以防止無意中修改庫的來源,如果源代碼管理的代碼在本地發生更改,則可能會發生這種情況。

與共享代碼通過庫的唯一問題可能是缺乏用於通過在嵌入式工具鏈的一些工具的庫代碼源代碼級調試支持(例如附連到仿真器的調試器)。在這種情況下,通過源代碼重用代碼可能是可以接受的。如果可能,您應該通過文件系統訪問控制來防止修改源。

+1

海報正在討論共享單個源文件,而不是共享庫。 ;) – Devolus

+0

@Devolus OP提到了問題中的靜態庫,所以我認爲庫是可以的。 – dasblinkenlight

+0

實際上共享源碼模塊,如某些線程所示,例如。 http://stackoverflow.com/questions/5673767/svn-common-code-with-externals?rq=1 –

2

如果有可重用的組件,圖書館是要走的路。

  1. 它更容易維護,並且您有一個清晰的界面。納入新項目也更容易。
  2. 您可以輕鬆完成單個單元測試的庫代碼
  3. 風險較低複製和粘貼代碼。
  4. 程序員更知道,當他們必須從庫中使用這個代碼是共享的。
+0

svn aproach有一些優點嗎?我看到很多問題,他們使用SVN重用代碼。 http://stackoverflow.com/questions/669628/svn-best-way-to-share-common-code-across-projects –

+1

我曾在一家公司工作過,他們使用類似的方法,這是可怕的,因爲代碼分成不同的項目。這意味着我們必須在不同的副本中一遍又一遍地修復錯誤。我真的不明白這一點。一個圖書館是一個乾淨的分離,如果圖書館真的是一個圖書館,沒有依賴關係來回,那麼它就是最乾淨和最好的選擇。調試不是一個原因,因爲你可以讓源代碼訪問。 – Devolus

2

幾個很好的理由已經進行了圖書館的做法。

然而,有一個爲重樓(也許從相同源代碼庫),每次構建一個相關項目時間至少一個很好的理由,這將是應用靶項目或發展階段 - 的能力所有代碼的獨特編譯設置,包括共享部分。

+0

確切地說,那些構建選項(預編譯器邏輯)是C的一大特性。但是,我們應該使用靜態庫來擺脫它們,還是有架構策略可以爲我們描述這些功能。 –