CMake target_link_libraries for boost-python 找不到 .lib 但变量 ${PYTHON_LIBRARIES} 指向它
CMake target_link_libraries for boost-python does not find the .lib but the variable ${PYTHON_LIBRARIES} points to it
我正在使用一个简单的 CMake (3.17.3) 项目来检查我在 windows 10 机器上通过 vcpkg (2020.02.04-nohash) 安装的 boost-python (1.73) 使用VSCode (1.46.0)。 CMake 文件是
cmake_minimum_required(VERSION 3.5)
find_package(PythonLibs 3.8 REQUIRED)
find_package(Boost COMPONENTS python38 REQUIRED)
set(CMAKE_SHARED_MODULE_PREFIX "")
add_library(hello_ext MODULE hello_ext.cpp)
target_link_libraries(hello_ext ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
target_include_directories(hello_ext PRIVATE ${Boost_LIBRARIES} ${PYTHON_INCLUDE_DIRS})
构建时出现的错误是LINK : fatal error LNK1104: cannot open file 'python38.lib' [E:\Code\python_starter\build\hello_ext.vcxproj]
${PYTHON_LIBRARIES}
变量是 optimizedE:/SD/Programming/C++/vcpkg/installed/x64-windows/lib/python38.libdebugE:/SD/Programming/C++/vcpkg/installed/x64-windows/debug/lib/python38_d.lib
,手动检查确认 python38.lib 是该变量假定的位置。
我被难住了。 target_link_libraries(hello_ext ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
似乎没有找到 python38.lib 但它在变量 ${PYTHON_LIBRARIES}
中
我觉得我遗漏了一些非常明显的东西。我是 cmake 的新手,请放轻松!
*** 编辑:如果我 'hard code' link 到 python.lib,项目构建即
#target_link_libraries(hello_ext ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
target_link_libraries(hello_ext E:/SD/Programming/C++/vcpkg/installed/x64-windows/lib/python38.lib ${Boost_LIBRARIES})
构建良好。
我想我有解决办法。根据 FindPythonLibs
find_package(PythonLibs 3.8 REQUIRED)
查找相关 python 环境变量的方法已弃用,需要替换为
find_package(Python COMPONENTS Interpreter Development)
这样,target_include_directories
宏中的大小写从 ${PYTHON_LIBRARIES}
变为 ${Python_LIBRARIES}
我正在使用一个简单的 CMake (3.17.3) 项目来检查我在 windows 10 机器上通过 vcpkg (2020.02.04-nohash) 安装的 boost-python (1.73) 使用VSCode (1.46.0)。 CMake 文件是
cmake_minimum_required(VERSION 3.5)
find_package(PythonLibs 3.8 REQUIRED)
find_package(Boost COMPONENTS python38 REQUIRED)
set(CMAKE_SHARED_MODULE_PREFIX "")
add_library(hello_ext MODULE hello_ext.cpp)
target_link_libraries(hello_ext ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
target_include_directories(hello_ext PRIVATE ${Boost_LIBRARIES} ${PYTHON_INCLUDE_DIRS})
构建时出现的错误是LINK : fatal error LNK1104: cannot open file 'python38.lib' [E:\Code\python_starter\build\hello_ext.vcxproj]
${PYTHON_LIBRARIES}
变量是 optimizedE:/SD/Programming/C++/vcpkg/installed/x64-windows/lib/python38.libdebugE:/SD/Programming/C++/vcpkg/installed/x64-windows/debug/lib/python38_d.lib
,手动检查确认 python38.lib 是该变量假定的位置。
我被难住了。 target_link_libraries(hello_ext ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
似乎没有找到 python38.lib 但它在变量 ${PYTHON_LIBRARIES}
我觉得我遗漏了一些非常明显的东西。我是 cmake 的新手,请放轻松!
*** 编辑:如果我 'hard code' link 到 python.lib,项目构建即
#target_link_libraries(hello_ext ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
target_link_libraries(hello_ext E:/SD/Programming/C++/vcpkg/installed/x64-windows/lib/python38.lib ${Boost_LIBRARIES})
构建良好。
我想我有解决办法。根据 FindPythonLibs
find_package(PythonLibs 3.8 REQUIRED)
查找相关 python 环境变量的方法已弃用,需要替换为
find_package(Python COMPONENTS Interpreter Development)
这样,target_include_directories
宏中的大小写从 ${PYTHON_LIBRARIES}
变为 ${Python_LIBRARIES}