CMake、SWIG 和共享库

CMake, SWIG & shared library

大家早上好,

我联系你是因为我遇到了一个问题。 我正在使用 CMake 编译和构建 SWIG 包装器 C++/C# 动态库。 这个包装器允许我将 DLL C++ 与 C# 执行程序一起使用。

我希望能够在我的库上启动 CTEST 以验证我没有错误。 "Windows" 库的问题是您需要导出符号才能使用它。 对于通常的库,我会将命令 "SHARED" 添加到 "add_library" :

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

但是要构建库 throw 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"。有了这个解决方案,我就有了一个真正的共享库,可以用于我的测试。