python – Swig -outdir选项不包含.so文件
我有一个小项目,我使用CMake系统从C文件创建一个
Python模块.在CMakeLists.txt文件中,我将Swig集成如下:
# only the Swig part here find_package(SWIG REQUIRED) include(${SWIG_USE_FILE}) find_package(PythonLibs) include_directories(${PYTHON_INCLUDE_PATH}) set(CMAKE_SWIG_OUTDIR ${PROJECT_BINARY_DIR}/../lib/Foo) SET_SOURCE_FILES_PROPERTIES(swig/interface.i PROPERTIES CPLUSPLUS ON) set_source_files_properties(swig/interface.i SWIG_FLAGS "-includeall;-c++;-shadow") swig_add_module(Foo python swig/interface.i code/foo.cpp) swig_link_libraries(Foo foolib ${PYTHON_LIBRARIES}) 我的第一个问题是为什么不在CMAKE_SWIG_OUTDIR指定的位置创建Foo.py和_Foo.so?仅在该目录中创建.py文件.这是CMake UseSWIG.cmake文件的错误吗? .so文件仍在PROJECT_BINARY_DIR位置.因此,如果只有位置CMAKE_SWIG_OUTDIR位于PYTHON_PATH环境变量中,则无法在Python中加载模块.所以为了解决这个问题,我可以: >将PROJECT_BINARY_DIR目录添加到PYTHON_PATH. 但这些似乎都不是逻辑上的事情,因为CMAKE_SWIG_OUTDIR应该用于输出.py和.so文件.我在这里错过了什么吗? 解决方法
我不确定为什么CMAKE_SWIG_OUTDIR不会影响生成.so文件的位置.但是,我可以告诉您一种更简单,更清晰的方式来指示.so文件应该生成的位置.
在你的swig_add_module(Foo …)之后,会创建一个名为_Foo的CMake目标.然后,您可以编辑目标的属性并更改其库(.so文件)生成的位置–set_target_properties(.. LIBRARY_OUTPUT_DIRECTORY< so_file_output_dir>). 所以在你的代码中,只需添加如下所示的set_target_properties(..)行: ... swig_add_module(Foo python swig/interface.i code/foo.cpp) set_target_properties(_Foo PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SWIG_OUTDIR}) swig_link_libraries(Foo foolib ${PYTHON_LIBRARIES}) ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |