2016-07-20 187 views
0

我在windows上學習cmake。
我閱讀並運行this example,以便我可以從一個Visual Studio項目構建靜態和共享庫。
我發現這個命令:
如何通過cmake同時建立靜態庫和共享庫

add_library(math SHARED ${MATH_SOURCES} ${SIMPLE_FUNCTION_SOURCES} ${ADVANCED_FUNCTION_SOURCES}) 

根據我的理解,這個命令是建立共享庫。另外,從here,如果我想建立靜態和共享庫,我必須做兩個項目。

那麼,爲什麼我使用的第一個示例可以從一個Visual Studio項目構建兩個庫?

編輯
感謝Florian,關鍵的一點是在MathExports.h。爲了讓人們更容易地看到,我把文件在這裏:

#ifndef MathExports_h 
#define MathExports_h 

#ifdef _WIN32 
    #ifdef math_EXPORTS 
     #define MATH_EXPORT __declspec(dllexport) 
    #else 
     #define MATH_EXPORT __declspec(dllimport) 
    #endif 
#else 
    #define MATH_EXPORT 
#endif 

#endif // MathExports_h 

回答

2

鏈接的例子並沒有建立一個獨立的靜態math庫。它具有「導出」(請參閱​​MathExports.h),因此它會生成額外的導入.lib(它引用構建共享庫)。

當您「鏈接」DLL時使用此導入庫。

您可以使用

dumpbin /symbols math.lib 

看向math.dllmath.lib的引用。

參考

+0

非常感謝你。 – sflee