如何在cmake中更改SWIG生成的.py文件?

2 投票
2 回答
3214 浏览
提问于 2025-04-16 10:40

我们可以把 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)

2 个回答

1

我对CMAKE不太熟悉,不过我知道你可以通过命令行选项来设置SWIG的输出路径,这个选项是给SWIG程序用的:

swig.exe -outdir /path/I/want

也许在上面那行写着SET(CMAKE_SWIG_FLAGS "")的地方,你可以在括号里填入需要的命令行选项?

5

来自 CMake 2.8 文档

还有一个特别的变量叫做 CMAKE_SWIG_OUTDIR,它可以让你指定 SWIG 生成的模块要写到哪里(就是 SWIG 的 -outdir 选项)。

所以,举个例子:

set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/bin)

撰写回答