2009-10-05 165 views
5

我想有不同的項目依賴項,具體取決於我目前正在構建的項目配置。如何爲每個項目配置設置不同的項目依賴關係?

例如,我不想在Release配置中構建和鏈接SomeTestLib.vcproj,但我想在Debug中構建並鏈接到它。

一個解決方案,那八九不離十的作品,是使用條件編譯宏:

#ifdef DEBUG 
#pragma comment(lib, "SomeTestLib") 
#endif 

但在這種情況下,調試器和智能感知沒有爲SomeTestLib工作。
是否有.sln或.vcproj破解我可以使用?
謝謝。

回答

6

在Google搜索了幾天之後,我終於放棄了尋找解決這個問題的方法,並且吹了一個VS開發人員,他給了我這個問題的解決方法(實際上,我嘗試了一些不同的東西來找到這個問題)。

顯然,IDE不夠聰明,無法知道您在給定配置下禁用了特定庫的構建,也沒有將該項目的輸出添加到鏈接器命令行中以獲取依賴它的項目。我相信你知道這一點。

但是,由於它只是將庫項目的輸出行粘貼到從屬項目的命令行中,所以將輸出行設置爲「」將導致NOTHING被添加到依賴項目的鏈接器命令行中!

希望這個問題將來會在Visual Studio中得到糾正。我保持樂觀,因爲它是我最喜歡的IDE,我對它支持的功能印象深刻。然而,我見過的一些VS幫助線程說這個bug是「按設計」的,所以也許他們不會修復它。雖然這似乎很容易做到。

不管怎麼說,概括地說:

  • 右鍵單擊在Solution Explorer中的庫項目,並單擊「屬性」。
  • 切換到您的庫項目不爲其構建的「配置/平臺」對。
  • 選擇「Configuration Properties - > Librarian - > General」。
  • 對於「輸出文件」,輸入「」(即打開parens,空格,關閉parens)。
  • 單擊確定。

請注意,如果您構建或清理禁用的庫項目,此解決方法會給您帶來錯誤。如果你只是建立你的解決方案,它將被禁用配置,所以你不會得到錯誤。

希望這會有所幫助!

丹尼爾

+0

謝謝,這太棒了! 另一件事:如果您正在鏈接的依賴項恰好是.dll,那麼您還可以將導入庫的名稱設置爲「」,它將被忽略。該選項位於鏈接器 - >高級 - >導入庫。 – k0dek0mmand0 2010-01-20 11:26:10

0

在visual studio中,每個構建配置會爲您的項目保留自己的屬性列表。只需將你的lib添加到你想要的任何構建配置。只是不要添加到「所有配置」

+0

我實際上是問一個項目是解決方案的一部分,而不是外部庫。我知道你在暗示的選項。我想要實現的是在某些解決方案配置中將項目依賴項標記爲非活動狀態。 – k0dek0mmand0 2009-10-05 09:49:05

0

右鍵單擊您的解決方案並選擇屬性。解決方案屬性頁會顯示出來..

在右側頁面中選擇配置屬性>>>配置

在這裏,您可以選擇調試,發佈構建配置,並通過檢查標爲構建複選框所有構建類型。

+0

如果我理解正確,在這裏取消選中一個項目將會阻止它被構建。但是,如果這個未經檢查的項目被標記爲項目依賴項,則鏈接器將會投訴(找不到SomeTestLib.lib)。 – k0dek0mmand0 2009-10-05 09:45:41

+0

如果已經構建並且程序集存在於同一目錄中,則不會。由於當您構建項目時,除GAC中安裝的所有依賴項外,其他所有依賴項都將複製到該程序集的私有文件夾中。然而,由於它依賴於其他程序集,並且在該程序集的源代碼中進行了更改,因此它將首先構建所有依賴項。 – 2009-10-05 10:00:58

+0

好的,但我甚至不想在Release配置中構建SomeTestLib,這就是整個問題。 :) – k0dek0mmand0 2009-10-05 10:10:00

2

可以關閉從屬項目中的鏈接器/常規/鏈接庫依賴項屬性,並將庫存入鏈接器輸入中的相關配置中。

它使項目引用不太有用,但是可行。

1

設置在項目屬性配置類型對功利的,而不是應用程序/庫 - >常規..

0

在主體工程,進入配置屬性 - >鏈接器 - >輸入,在標題爲「忽略特定庫」的部分添加您想要提交的庫,例如:.lib。除了忽略不同的lib/dll之外,對其他配置再次執行此操作。最後,如果你不想讓每個項目都建立這兩個配置,右鍵點擊解決方案 - >項目依賴關係 - > [選擇主要/頂級項目] - >取消選擇你不想建立/忽略。

此方法的優點是,如果需要,您仍然可以手動構建每個項目,但可以切換配置並僅構建/使用所需的lib/dll。

相關問題