簡體   English   中英

C ++ Visual Studio - 多項目解決方案 - “靜態庫”與“包含目錄”

[英]C++ Visual Studio - multi-project solution - “static lib” vs “include directories”

我正在嘗試使用Visual Studio中的靜態庫來設置多項目解決方案。

作為一個例子,OtherProject包含類Foo位於foo.h中 ,我想在這個項目MyProject的使用項目。

根據我的理解,要使用靜態庫完成此操作,我必須:

  1. OtherProject中,將“Configuration Type”更改為“Static library(.lib)”。
  2. MyProject中
    1. 在“Common Properties - > Framwork and Referencees”中添加對OtherProject的新引用
    2. 在“VC ++目錄”中
      1. 在“包含目錄”中添加OtherProject的頭文件的路徑。
      2. 在“庫目錄”中,將路徑從OtherProject添加到創建的“OtherProject.lib”。
    3. 在“輸入>附加依賴項”中,添加“OtherProject.lib”。 (編輯)此步驟似乎是不必要的,並且在2.1期間隱式進行(感謝@JBentley將其指出)。
  3. 解決方案屬性 - > Common Properites - > Project Dependencies”,在下拉列表中選擇MyProject並將依賴添加到OtherProject (編輯)這是不必要的,並且在步驟2.1(也是@JBentley)中隱式地進行。

......一切都應該是桃子的。 但是,如果我跳過上面的所有內容並且只包含OtherProject的源文件,如下所示:

  1. MyProject “VC ++目錄 - >包含目錄”中添加OtherProject頭文件的路徑(以及可能的源文件?)。

......一切似乎都像以前一樣工作,工作少得多。

我在MyProject中的測試文件如下所示:

#include <OtherProject/Foo.h>

int main()
{
    Foo foo;
    return 0;
}

問題

  • 我的“靜態庫”方法是否有效,或者我以后可能會遇到問題?
  • 第二種方法有效嗎? 它會在以后產生問題嗎? 我想一個缺點是我無法隱藏lib文件中的部分實現,並且必須提供源代碼和頭文件而不是lib和頭文件。
  • 每種方法都有利弊嗎?

(編輯)以下問題是關於類似的問題: 在不獲取LNK4006的情況下,在Visual C ++中鏈接具有依賴項的庫 看來Visual Studio很聰明,可以處理我列出的一些步驟,避免不必要的步驟似乎擺脫了“LNK4006第二個定義被忽略”我進一步下線了:

我的“靜態庫”方法是否有效,或者我以后可能會遇到問題?

看起來是對的。 看不到會導致問題的任何事情(除非您開始移動目錄等)。

Foo的實現缺乏源代碼可能會妨礙調試,使其更難使用。 當然,您始終可以提供源文件和庫的調試版本,在這種情況下,此特定問題“消失”。

第二種方法有效嗎? 它會在以后產生問題嗎? 我想一個缺點是我無法隱藏lib文件中的部分實現,並且必須提供源代碼和頭文件而不是lib和頭文件。

是有效的(從某種意義上說,你可以將其他項目中的其他源代碼包含到當前項目中 - 它不再是技術上的“靜態庫”),是的(用戶可能需要將Foo.cpp文件添加到項目以及項目包含的任何其他文件。如果Foo和它的部分是很多文件,這可能是一個主要的缺點。

除了必須提供源之外,還可以增加整個項目的編譯時間(至少從頭開始構建)。 對於小型項目而言,這可能不是問題,但較大的項目可能需要相當長的時間來構建。

當然,加上Foo類功能的用戶可以進入源代碼並在出現問題時對其進行調試。

 Is there any pros and cons of each methods? 

我想,上面已回答。

在你沒有真正創建靜態庫的意義上,你的第二種方法並不完全有效。 您只需將OtherProject源放在不同的目錄中,但它是作為MyProject一部分構建的。

因此,如果您真的想要創建一個靜態庫來隱藏實現,那么您必須執行“額外”步驟。 沒有捷徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM