将FindBoost CMAKE指向boost_python Windows 10,VS 2017

时间:2017-07-10 00:10:02

标签: boost cmake visual-studio-2017 boost-python

我的高级目标是使用Visual Studio 2017在Windows 10上安装BGSlibrary,这需要对python进行提升。我使用cmake 3.9.0从源代码编译opencv和boost(1.64.0)。在BGSLIBRARY的cmake期间,我得到了

$ cmake -DBGS_PYTHON_SUPPORT=ON -DBOOST_ROOT="C:/Program Files/boost_1_64_0/" ..
-- BGSLIBRARY WITH PYTHON SUPPORT: ON
-- OpenCV library status:
--     version: 3.3.0
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.9/           Modules/FindBoost.cmake:1877 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.64.0

  Boost include path: C:/Program Files/boost_1_64_0

  Could not find the following Boost libraries:

          boost_python

  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the  location of
  Boost.
Call Stack (most recent call first):
  CMakeLists.txt:75 (find_package)

我在cmake findboost模块上看到了很多问题。好的,让我们从这里开始。

  1. 我下载并解压缩1.64.0并将其放在此处
  2. enter image description here

    1. 我运行了bootstrap.bat和.b2来生成构建提升

      C:\ Program Files \ boost_1_64_0> b2 toolset = msvc-14.1 --with-python --user-config = user-config.jam

    2. 使用用户配置

      import toolset : using ;
      using msvc : 14.1 ;
      using python 
        : 2.7  # Version
        : C:\\Python27\\python.exe  # Interpreter
        : C:\\Python27\\include  # inc dir
        : C:\\Python27\\libs  # link libs
        : # conditions
        ;
      

      我可以在这里看到python源

      image

      并且可以在Visual Studio 2017命令提示符中确认我使用python支持构建boost并且它成功找到所有目标。

      我可以看到一堆" python" .lib文件在这里。阅读其他问题表明这就是它的发展方向。

      enter image description here

      但我似乎无法让cmake看到它。 我尝试将名称libboost_python更改为boost_python。我已经尝试过指向cmake -DBOOST_ROOT或-DBOOST_LIBRARYDIR(或非debg,-BOOST_LIBRARYDIR)。我已经尝试将lib目录添加到PATH。但似乎没有任何效果。这是一个cmake问题,一个不完整的升级安装或BGSLibrary的问题?

      修改

      要回答@utopia,有问题的CMakeList部分会读取

      if(BGS_PYTHON_SUPPORT)
      set(Boost_USE_STATIC_LIBS OFF)
      set(Boost_USE_MULTITHREADED ON)
      set(Boost_USE_STATIC_RUNTIME OFF)
      
      find_package(Boost REQUIRED COMPONENTS python)
      find_package(PythonLibs REQUIRED)
      
      message(STATUS "Boost library status:")
      message(STATUS "    version: ${Boost_VERSION}")
      message(STATUS "    libraries: ${Boost_LIBRARIES}")
      message(STATUS "    include path: ${Boost_INCLUDE_DIRS}")
      
      message(STATUS "Python library status:")
      message(STATUS "    version: ${PYTHON_VERSION}")
      message(STATUS "    libraries: ${PYTHON_LIBRARIES}")
      message(STATUS "    include path: ${PYTHON_INCLUDE_DIRS}")
      

      ENDIF()

      这是否意味着.lib应该字面上命名为python.lib?没有其他字符或者boost_python.lib。这是具体的吗?

      1. Building Boost.Python

1 个答案:

答案 0 :(得分:1)

@utopia带领我找到了正确的解决方案。 .lib需要字面上命名为boost_python.lib,不附加visual studio编译器版本,boost版本等。之后我能够成功构建,不需要cmake标志。