[英]C++ Visual Studio - multi-project solution - “static lib” vs “include directories”
我正在嘗試使用Visual Studio中的靜態庫來設置多項目解決方案。
作為一個例子,OtherProject包含類Foo位於foo.h中 ,我想在這個項目MyProject的使用項目。
根據我的理解,要使用靜態庫完成此操作,我必須:
......一切都應該是桃子的。 但是,如果我跳過上面的所有內容並且只包含OtherProject的源文件,如下所示:
......一切似乎都像以前一樣工作,工作少得多。
我在MyProject中的測試文件如下所示:
#include <OtherProject/Foo.h>
int main()
{
Foo foo;
return 0;
}
問題
(編輯)以下問題是關於類似的問題: 在不獲取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.