swig转换的cmake配置很乱 没有一个详细的解释。
当将.i文件单独拎出来生成一个单独的dll非常的麻烦。
于是采用最简便的方法。
并且生成的dll不影响c++本身项目的使用。
比如这个既可以给c#用也可以给c++用。
不用重复修改、重复编译。
核心:不要把.i文件单独拎出来,在生成一个项目。
这样会导致需要生成的项目重新配置一遍,完全是重复的操作。并且要维护两个CMakeLists.txt
假定我们需要有一个项目导出,原本的项目为动态库。
只需要更改swig配置即可。
在原本的项目CMakeLists.txt中。我们关闭
if(0)
ADD_LIBRARY(${LIB_NAME} SHARED
${COMMON_SOURCE_FILES}
${COMMON_HEAD_FILES}
${COMMON_HEAD_PUBLIC}
${EVENT_FILES}
${ITEM_EVENT}
)
else()
#这里添加swig配置即可
endif()
swig的添加
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
set_property(SOURCE Cplusplus2CSharp.i PROPERTY CPLUSPLUS ON)
接下来是如何把所有的项目都包含进来:
set(swig_source_file
${COMMON_SOURCE_FILES}
${COMMON_HEAD_FILES}
${COMMON_HEAD_PUBLIC}
${EVENT_FILES}
${ITEM_EVENT}
)
设置输出目录和输出文件目录
set(CGRenderView_include_DIR "${CGRender_ROOT_DIR}/include/CGRenderView")
set(Cplusplus2CSharp_DIR "${CGRender_ROOT_DIR}/include/Cplusplus2CSharp")
用siwg的add_library
请看:
还需要在find前添加:
cmake_policy(SET CMP0122 NEW)
if ( MSVC )
set(SWIG_DIR "/third/swig/Lib")
set(SWIG_Source_DIR "/third/swig/Source/Include")
include_directories(${SWIG_DIR})
include_directories(${SWIG_Source_DIR})
set(SWIG_EXECUTABLE "/third/swig/swig.exe")
endif (MSVC)