CMake FindPython Oddity:MSVC 没有链接 CMakes 指示链接的库



我正在测试我的cmake python扩展设置实用程序,遇到了一个奇怪的行为,我似乎无法自己解决。

从本质上讲,我的CMakeLists.txt归结为 2 行:

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
...
Python3_add_library (${TARGET} SHARED ${SRCS})

当我尝试在调试模式下构建时,MSVC 2019 会引发链接器错误:

LINK : fatal error LNK1104: cannot open file 'python37_d.lib'

我正在使用 conda,我知道我的 PC 上没有调试库。所以,我开始四处挖掘,看看我是否可以规避它:主要只是为了链接到发布库,python37.lib......

在这个 stackoverflow 帖子的帮助下,我打印了所有目标属性并找到了相关条目:

mymath LINK_LIBRARIES = Python3::Python

指示使用导入的目标FindPython3配置。因此,我也打印了它的属性并发现:

Python3::Python IMPORTED_IMPLIB = C:/Users/tikum/miniconda3/libs/python37.lib

感到困惑,我在构建目录中查看了相应的.vcxproj,发现

<ImportLibrary>
C:/Users/tikum/Documents/Python/python-cmaketools-cpython-example/build/src/cpython_example/mymath/Debug/mymath.lib
</ImportLibrary>

所以,我完全没有找到任何链接到python37_d.lib的痕迹......有人可以启发我这里发生了什么吗?

附言,我正在尝试编译的示例 C 代码是我在网上找到的 Martino Pilia示例的逐行副本。

你必须取消定义DEBUG或_DEBUG,不记得了,在你的代码中包含python.h,因为Python与pragma指令相关联。所以它与cmake无关。

像这样的东西

#ifdef DEBUG
#undef DEBUG
#include <Python.h>
#define DEBUG
#else
#include <Python.h>
#endif

应该做这个技巧

最新更新