使用CMake和Conan时,Boost/python.hpp没有正确链接

aiqt4smr  于 2023-10-20  发布在  Python
关注(0)|答案(1)|浏览(133)

我第一次尝试使用conan来检索Boost.Python并开始使用它的项目。我有问题,一旦我打开我的visual studio解决方案,我得到一个红色下划线的#include <boost/python.hpp>,它将无法编译。
我有一个后续的构建结构,
src/main.cpp如下,

#include <iostream>

#include <boost/python.hpp>  

using namespace boost::python;  

int main()
{
    std::cout << "Hello World!";
}

我的CMakeLists.txt

cmake_minimum_required(VERSION 3.15)

project(myMath)

find_package(Boost)

add_executable(${PROJECT_NAME}     
    src/main.cpp)

target_link_libraries(${PROJECT_NAME}     
    Boost::python)

最后我的conanfile.txt是,

[requires]
boost/1.83.0

[options]
boost*:without_python=False

[generators]
CMakeDeps
CMakeToolchain

运行conan install . --output-folder=build --build=missing将正确检索Boost并找到Boost::python。我构建我的解决方案使用,
cmake .. -G "Visual Studio 19 2022" -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
conan_toolchain.cmake内部,我可以看到以下行,
list(PREPEND CMAKE_INCLUDE_PATH "C:/Users/Name/.conan2/p/b/boost4b77a2a85257b/p/include"
我可以验证python.hpp存在于C:/Users/Name/.conan2/p/b/boost4b77a2a85257b/p/include/boost/python.hpp
单从这个组件,我不知道为什么它不连接。
从这一切我不明白为什么我的visual studio不能正确链接到boost/python.hpp一旦我打开我的解决方案。任何帮助都是感激不尽的。我还收到一个链接错误试图找到ZLIB时,以下柯南2教程。我已经遵循了所有的步骤,并确保变量都是从我的前一个问题设置。
所需的文件夹结构为,

BoostExample
    - Build
        - CMake
            - CMake output is here (soltuion etc)
        - (Build file from conan are put here)
    - Src
        main.cpp
    - CMakeLists.txt
    - conanfile.txt

尝试从CLI编译时的确切错误是,

C:/Users/Michael/.conan2/p/b/boost4b77a2a85257b/p/include\boost/python/detail/wrap_python.hpp(57,11): fatal  error C108
3: Cannot open include file: 'pyconfig.h': No such file or directory [C:\Users\Michael\Desktop\C++\BoostExample\build\C
Make\myMath.vcxproj]

当打开解决方案文件时,一个红色的波浪线在包含下面,它将不会在那里编译。我也收到了同样的问题,当使用ZLIB教程,但似乎编译时使用CLI命令,但仍然没有正确链接。

q35jwt9p

q35jwt9p1#

奇怪的是,find_package(Boost)并不寻找python,即使在不使用conan的情况下也是如此,你需要自己手动引入python:

cmake_minimum_required(VERSION 3.15)

project(myMath)

find_package(Boost)
find_package(Python3 COMPONENTS Development)

add_executable(${PROJECT_NAME}     
    main.cpp)

target_link_libraries(${PROJECT_NAME}     
    Boost::python Boost::python Python3::Python)

相关问题