【问题标题】:How to change the generated .py file by SWIG in cmake?如何在 cmake 中通过 SWIG 更改生成的 .py 文件?
【发布时间】:2011-01-26 16:32:53
【问题描述】:

我们可以将 EXECUTABLE_OUTPUT_PATH 用于 ${PROJECT_BINARY_DIR}/bin 之类的东西。如何通过 SWIG 为生成的 python 模块设置输出路径。

例如,得到以下 CMakeLists.txt

FIND_PACKAGE(SWIG)
IF(SWIG_FOUND) 
FIND_PACKAGE(PythonLibs)
IF(PYTHONLIBS_FOUND)

INCLUDE(${SWIG_USE_FILE})

EXECUTE_PROCESS( COMMAND python -c "import sys;print"%s.%s"%sys.version_info[0:2]" OUTPUT_VARIABLE PYTHON_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)


INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

SET(CMAKE_SWIG_FLAGS "")

SET_SOURCE_FILES_PROPERTIES(partio.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(partio.i PROPERTIES SWIG_FLAGS "-includeall")
SWIG_ADD_MODULE(partio python partio.i)
SWIG_LINK_LIBRARIES(partio ${PYTHON_LIBRARIES} ${ZLIB_LIBRARY} partio)

SET(PYTHON_DEST "lib64/python${PYTHON_VERSION}/site-packages" )
INSTALL(TARGETS _partio DESTINATION ${PYTHON_DEST})
INSTALL(FILES ${CMAKE_BINARY_DIR}/${outdir}/src/py/partio.py  DESTINATION ${PYTHON_DEST})

ENDIF(PYTHONLIBS_FOUND)
ENDIF(SWIG_FOUND)

【问题讨论】:

  • 无关,但你不需要“IF”守卫;您应该能够将“REQUIRED”参数添加到 find_package,例如“find_package(需要 SWIG)”。

标签: python cmake swig


【解决方案1】:

来自CMake 2.8 docs

另一个特殊变量是 CMAKE_SWIG_OUTDIR,它允许一个 指定在哪里写所有的痛饮 生成的模块(swig -outdir 选项)

所以,例如:

set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/bin)

【讨论】:

    【解决方案2】:

    我不熟悉 CMAKE,但是我知道您可以使用 SWIG 可执行文件的命令行选项设置 SWIG 的输出路径:

    swig.exe -outdir /path/I/want
    

    也许上面的行是 SET(CMAKE_SWIG_FLAGS "")

    你可以把需要的命令行选项放在括号里吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-21
      • 2015-01-25
      • 2022-01-18
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多