2010-05-31 59 views
4

在同一個VS項目中,解決方案還包含多個項目的多個構建配置的正確和簡單的步驟方式是什麼?這些項目會有不同的構建配置。基本上,我正在尋找類似項目A的Dll Debug,Dll Release,靜態(庫)調試和靜態(庫)發佈,項目B與調試&版本構建.exe。在一個解決方案中具有多個(不同)構建配置的多個項目

回答

3

這不是它的工作方式。如果您讓庫選擇靜態鏈接CRT或使用CRT的DLL版本,則您也必須在EXE項目上具有相同的選項。混合這些選項通常會產生大量的鏈接器錯誤。即使您設法避免它們,當來自.lib的函數使用EXE中函數的不同存儲器分配器時,災難也會在運行時觸發。

使用「他們所有」的方法沒有多大意義。只要你知道你只會使用靜態庫並創建一個單一的EXE blob,那麼CRT的靜態版本就很有意義。使您的程序更容易部署。如果你有一天在考慮使用DLL,那麼只有CRT的DLL版本纔有意義。

+0

我要找如何庫源提供一個建立Dll或者靜態庫的選項(或兩者)。有可能是一個單獨的項目,建立一個示例可執行文件或測試。 – KTC 2010-06-01 00:31:01

+0

@KTC:好的,沒關係。如果您選擇EXE不具備的配置,VS將只生成.libs。 – 2010-06-01 07:35:17

0

實現此目的的最簡單方法是創建編譯相同源的多個項目。您可以爲每個需要的案例(DLL,Static Lib)提供項目。然後,您可以對這些項目進行多種配置,以便它們可以生成多種變體。

項目A(DLL)

  • 「DebugStatic」 配置 - 調試,靜態CRT - > MYLIBDS.DLL
  • 「ReleaseStatic」 配置 - 推出,靜態CRT - > MYLIBS.DLL
  • 「 DebugDynamic」 - 調試,DLL CRT - > MYLIBD.DLL
  • 「ReleaseDynamic」 - 發行,DLL CRT - >中是指mylib.dll

項目B(LIB)

  • 「DebugStatic」 配置 - 調試,靜態CRT - > MYLIBDS.LIB
  • 「ReleaseStatic」 配置 - 推出,靜態CRT - > MYLIBS.LIB
  • 「DebugDynamic」 - 調試,DLL CRT - > MYLIBD.LIB
  • 「ReleaseDynamic」 - 釋放,DLL CRT - > MYLIB.LIB

您可以用同樣的方法來生成對於ANSI與Uni​​code中,86與64,單線程與不同的二進制文件多線程等。每個項目都包含相同的集合根據需要使用帶條件代碼塊的源文件。然後,您可以添加這樣的事情與圖書館相關的頭文件,以使其更容易在相應的版本鏈接:

#ifdef _DEBUG 
    #ifdef _DLL 
    #pragma comment(lib, "MYLIBD.LIB") 
    #else 
    #pragma comment(lib, "MYLIBDS.LIB") 
    #endif 
#else 
    #ifdef _DLL 
    #pragma comment(lib, "MYLIB.LIB") 
    #else 
    #pragma comment(lib, "MYLIBS.LIB") 
    #endif 
#endif 
相關問題