2012-07-25 22 views
3

我有一個C++解決方案的集合。它們都包含一個通用代碼目錄。 不只是#include,但它們也分別構建通用源文件。這裏的目錄結構的一個例子:如何讓項目共享中間文件(.obj)?

code/ 
    Common/ 
    ProjectA/ 
    ProjectB/ 

所以ProjectAProjectB無論從Common包括文件。我已將這兩個項目的中間目錄設置爲code/_build/Debug/Obj

我原本以爲如果我先建立了ProjectA,那麼ProjectB就不需要從Common源碼重建中間文件。這沒有發生。 ProjectB正在重建這些目標文件,如果我再次構建ProjectA,它也會重建它們。

就好像如果目標文件不是由當前正在編譯的項目生成的,就會觸發條件重建。這是真的?

我知道我可以用通用代碼創建一個庫,但這不是一個選項。

+1

爲什麼創建*共享庫*不是選項?將創建一個*靜態*庫是一個選項? – 2012-07-25 03:43:15

+0

我對代碼沒有太多的所有權。改變一些配置選項是可以的,但是從每個項目中刪除公共代碼並鏈接到一個庫可能會比它的價值更麻煩。 – Anthony 2012-07-25 03:46:06

+6

聽起來像你有更大的問題:) – leppie 2012-07-25 03:49:09

回答

2

就好像如果目標文件不是由當前正在編譯的項目構建的,就會觸發條件重建。這是真的?

是的。每個項目都維護着自己的構建文件的單獨列表。每個項目都將這些文件與其他每個對象分開構建,因爲每個項目也都是維護自己的獨立版本選項。即使在相同的解決方案中,每個項目都與其他項目分開。

您描述的問題以前遇到過。事實上很久以前。解決方案過去和現在都很簡單:創建第三個項目,該項目創建一個靜態的通用代碼庫,該庫由另外兩個項目鏈接。的確,靜態庫的存在對於恰恰是這個原因。

情況,如果禁止你使用的是被設計來解決這個確切的問題的解決方案,那麼你有兩種選擇:

  1. 改變這種情況下,這樣就可以使用該解決方案。
  2. 接受您的情況造成的不必要的更長的生成時間。
+0

選項2它是,現在。 – Anthony 2012-07-25 04:52:29