CMake构建调用多个参数的SWIG

Fle*_*exo 0 swig cmake

我可以使用CMake成功构建一个SWIG模块,例如给出一个简单的例子.i:

%module example
Run Code Online (Sandbox Code Playgroud)

并且一个空的example.cxx以下内容足以编译一个空的但工作正常的Python模块:

cmake_minimum_required(VERSION 2.8)

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

FIND_PACKAGE(PythonLibs)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

SET(CMAKE_SWIG_FLAGS "-Wall")

SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-builtin")

SWIG_ADD_MODULE(example python example.i example.cxx)
SWIG_LINK_LIBRARIES(example ${PYTHON_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

如果我想在构建期间调用更多选项到SWIG,那么显而易见的解决方案是更改CMakeLists.txt:

SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-py3 -builtin -extranative")
Run Code Online (Sandbox Code Playgroud)

但这不起作用,构建现在失败了:

[ 33%] Swig source
swig error : Unrecognized option -py3 -builtin -extranative
Use 'swig -help' for available options.
make[2]: *** [examplePYTHON_wrap.cxx] Error 1
make[1]: *** [CMakeFiles/_example.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

And running the build with VERBOSE=99 we can see why:

/usr/bin/swig2.0 -python -py3\ -builtin\ -extranative -Wall -outdir ...
Run Code Online (Sandbox Code Playgroud)

It's "helpfully" escaping the spaces. How can I stop CMake from doing that?

I tried a couple of ideas to fix it:

What's the way to pass multiple options correctly?

sak*_*kra 5

尝试使用set_property函数而不是set_source_files_properties.这个允许属性值为CMake列表:

set_property(SOURCE example.i PROPERTY SWIG_FLAGS "-py3" "-builtin" "-extranative")
Run Code Online (Sandbox Code Playgroud)