Я могу успешно создать модуль SWIG, используя CMake, например. Дано тривиальное example.i:CMake build вызов SWIG с несколькими аргументами
%module example
и пустой 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})
Если я хочу передать больше возможностей для SWIG, когда она вызывается в процессе сборки очевидное решение изменить CMakeLists.txt:
SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-py3 -builtin -extranative")
, но это не работает, сборка в настоящее время завершается с:
[ 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
И запустить сборку с VERBOSE=99
мы можем понять, почему:
/usr/bin/swig2.0 -python -py3\ -builtin\ -extranative -Wall -outdir ...
Это "услужливо" спасаясь пространства. Как я могу остановить CMake от этого?
Я попробовал несколько идей, чтобы исправить это:
Разделяя аргументы из
SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-py3", "-builtin", "-extranative")
Но это просто игнорирует второй и третий из них:
/usr/bin/swig2.0 -python -py3 -Wall -outdir ....
Использование макроса
SEPARATE_ARGUMENTS
:SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS SEPARATE_ARGUMENTS("-py3 -builtin -extranative"))
CMake терпит неудачу с этим, хотя:
set_source_files_properties called with incorrect number of arguments.
Что способ передать несколько вариантов правильно?