簡體   English   中英

CMake,SWIG和共享庫

[英]CMake, SWIG & shared library

大家,早安,

我聯系你是因為我遇到了問題。 我正在使用CMake編譯和構建SWIG包裝器C ++ / C#動態庫。 這個包裝器允許我使用帶有C#執行程序的DLL C ++。

我想能夠在我的庫上啟動CTEST以驗證我沒有錯誤。 “Windows”庫的問題是您需要導出符號才能使用它。 使用通常的庫,我將命令“SHARED”添加到“add_library”:

add_library( ${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS} )

但是要構建庫扔SWIG我需要使用“SWIG_ADD_MODULE”,它不知道命令“SHARED”。

我發現的唯一解決方案是創建兩個庫。 一個由SWIG構建並由C#代碼使用。 第二個版本通常使用“add_library”並由我的CTEST程序使用。 這是我的CMakeList:

###############################
# SWIG LYBRARY
###############################
include(GenerateExportHeader)
SET (MODULE_NAME     Mylib)
SET (INTERFACE_FILES Mylib.i)

FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(${SWIG_USE_FILE})

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

# call swig as:  'swig -csharp -c++ -outdir XXX'
SET_SOURCE_FILES_PROPERTIES(${INTERFACE_FILES} PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(${INTERFACE_FILES} PROPERTIES SWIG_FLAGS "-includeall")

SWIG_ADD_MODULE(${MODULE_NAME} csharp ${INTERFACE_FILES} ${${PROJECT_NAME}_SOURCES}  ${${PROJECT_NAME}_HEADERS} )
SWIG_LINK_LIBRARIES(${MODULE_NAME} ${CSHARP_LIBRARIES})
###############################
# DYNAMIC LYBRARY
###############################
add_library( ${PROJECT_NAME}Tester SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS} )
generate_export_header(${PROJECT_NAME}Tester EXPORT_MACRO_NAME OTHER_NAME_EXPORT)

我希望我能找到一種方法來構建一個並且兩者都可用。 謝謝你的幫助,周末愉快,克萊門特

@fedino @Scollii感謝您的回答,最后我通過在CMake中創建一個宏來解決我的問題,該宏填充swig命令的* .o並將其用回“add_library”。 有了這個解決方案,我有一個真正的SHARED庫,我可以用它進行測試。

暫無
暫無

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

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