Windows环境下CMake干净配置Python3.7规避Debug库链接方案
问题:Windows下VS2019+Python3.7开发中避免链接Python Debug库的干净解决方案
环境
- Python 3.7
- Windows 10
- VS2019
- 使用vcpkg管理依赖
当前CMakeLists.txt配置
find_package(Python COMPONENTS Development REQUIRED) message(STATUS "Python:") message(STATUS " Python_INCLUDE_DIRS: ${Python_INCLUDE_DIRS}") message(STATUS " Python_LIBRARIES: ${Python_LIBRARIES}") message(STATUS " Python_LIBRARY_DIRS: ${Python_LIBRARY_DIRS}")
运行CMake时指定的参数
-DPython_LIBRARY="c:/python37/libs/python37.lib" ^ -DPython_INCLUDE_DIR="c:/python37/include/" ^
遇到的问题
- 当libs目录中存在
python37_d.lib时,CMake会自动抓取这个Debug库,必须手动删除才能忽略 - pyconfig.h会自动链接对应版本的库,导致Debug模式下默认链接Debug Python库
- 链接Debug Python库的弊端:必须搭配
python_d.exe运行,否则会因加载错误DLL崩溃;而使用python_d.exe会导致环境异常(如文件查找失败等)
当前临时解决方案
代码层面处理pyconfig.h的自动链接
#if defined(DEBUG_PYTHON_WITH_RELEASE) #undef _DEBUG #define NDEBUG #include <Python.h> #define _DEBUG #undef NDEBUG #else #include <Python.h> #endif
使用SWIG时的额外处理
#define SWIG_PYTHON_INTERPRETER_NO_DEBUG
需求
希望找到简洁、干净的解决方案,替代当前的临时处理方式,避免手动删除库文件和代码中宏定义的hack。
内容的提问来源于stack exchange,提问作者Zohar Levi
相关产品推荐
相关产品推荐

