2010-12-08 56 views
6

我有一個大型的視覺工作室解決方案,約50個項目。有StaticDebug,StaticRelease,Debug和Release的配置。在dll和靜態lib形式中都需要一些庫。爲了得到它們,我們用不同的配置重建解決方案。配置管理器窗口用於設置哪些項目需要建立在哪些風格,靜態庫,動態DLL或兩者兼而有之。如何管理同時生成靜態lib和dll的建築庫項目?

這可能非常難以管理,而且需要多次構建解決方案並以正確的順序選擇配置有點煩人。靜態版本需要在非靜態版本之前構建。

我想知道,而不是這個當前的計劃,可能是更簡單的管理,如果我需要同時生產靜態lib和dynamc dll的項目,我創建了兩個項目。例如:

  • corelib的
  • CoreDll

我既可以使這兩個項目的引用所有相同的文件和建立他們的兩倍,或者我想知道,這將是不可能建立corelib的然後讓CoreDll鏈接它來生成DLL?

我想我的問題是,你有什麼建議如何在這種情況下構建你的項目?

謝謝。

+0

我使用兩個項目的方法,雖然我通常使32位和64位版本的東西,它本質上是相同的東西。你能不能做兩次編譯?在VS我不這麼認爲。從makefiles,是的。 – Tergiver 2010-12-08 20:40:00

+0

...但是,您可能在源代碼中有兩個不同的編譯指令。至少靜態版本不需要DllMain。 – Tergiver 2010-12-08 20:42:24

回答

3

做一個副本探險原始項目文件CoreLib.vcxproj(其他VS的情況下,檢查此時,相應的擴展名)

添加CoreLib.vcxproj作爲現有項目,以您的解決方案,節省您的解決方案。

轉至屬性 - >配置屬性 - >常規CoreLib

選擇全部配置(左上角)。

更改屬性配置類型靜態庫

更改屬性目標分機.lib

追加到屬性中間目錄例如\ Lib \

轉到屬性 - >配置屬性> C/C++ - > Preporcessor

選擇調試配置(左上角)。

現在編輯屬性預處理定義和改線_USRDLL_USRLIB

選擇發佈配置(左上角)。

現在編輯屬性預處理定義和改線_USRDLL_USRLIB

在你的頭文件,你應該有類似以下內容:

#ifdef MyDll_EXPORTS 
#define MyDll_API  __declspec(dllexport) 
#else 
#define MyDll_API  __declspec(dllimport) 
#endif 

變化成如下所示:

#ifdef MyDll_EXPORTS  
#ifdef _USRLIB  
#define MyDll_API  
#else  
#define MyDll_API  __declspec(dllexport)  
#endif  
#else 
// Here must deploy your own logic whether static or dynamic linking is used. 
// read my comment below 
#define MyDll_API  __declspec(dllimport)  
#endif 

現在你的構建生成原始的DLL和導入庫以及一個新的靜態庫!

1

也許你可以檢查一下CMake爲這種情況生成的構建系統。我猜測它會爲每個案例產生兩個項目。但通過這種方式創建解決方案,它可能爲您節省大量工作。