2013-06-11 6 views
0

Я могу успешно создать модуль 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. 
    

Что способ передать несколько вариантов правильно?

ответ

4

Попробуйте использовать функцию set_property вместо set_source_files_properties. Это одна позволяет значение свойства быть список CMake:

set_property(SOURCE example.i PROPERTY SWIG_FLAGS "-py3" "-builtin" "-extranative") 
0

, когда вы отделяете флаги с запятой будет SET_SOURCE_FILES_PROPERTIES принимать их (проверено на CMake 2.8.11):

SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-py3;-builtin;-extranative;") 
Смежные вопросы