首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake在Windows上找不到Boost

CMake在Windows上找不到Boost
EN

Stack Overflow用户
提问于 2020-12-18 13:08:56
回答 1查看 5K关注 0票数 4

我有一个非常简单的CMake文件,它在linux上工作得很好,但是在windows上,它说它找不到boost (尽管它似乎找到了它,就像它说的“找到了合适的版本”)。下面是初始构建文件:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.16.3)
project(filecompare)

set(CMAKE_CXX_STANDARD 20)

find_package(Boost 1.73.0 COMPONENTS program_options)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(filecompare filecompare.cpp)
    target_link_libraries(filecompare ${Boost_LIBRARIES})
endif()

CMake输出:

代码语言:javascript
复制
-- Could NOT find Boost (missing: Boost_INCLUDE_DIR program_options) (Required is at least version "1.73.0")
-- Configuring done
-- Generating done
-- Build files have been written to: C:/repos/filecompare/cmake-build-debug

因此,它似乎无法单独找到库,因此我在find_package上添加了以下行:

代码语言:javascript
复制
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/local/boost_1_73_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/local/boost_1_73_0/lib64-msvc-14.2")

现在它似乎找到了库,但没有找到,这是输出:

代码语言:javascript
复制
-- Could NOT find Boost (missing: program_options) (found suitable version "1.73.0", minimum required is "1.73.0")
-- Configuring done
-- Generating done
-- Build files have been written to: C:/repos/filecompare/cmake-build-debug

我试过设置这样的东西:

代码语言:javascript
复制
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
SET(BOOST_ROOT "C:/local/boost_1_73_0/boost")

但这也没什么用。那我在这里做错什么了?我在CLion上使用clang和VisualStudio 2019

EN

回答 1

Stack Overflow用户

发布于 2020-12-19 07:50:36

在我看来,你有两个不同的问题:

  1. CMake不知道在哪里可以找到boost.
  2. You,还没有为clang.

构建boost库二进制文件

第一个问题很容易解决,你几乎把它做对了。要使CMake找到需要设置的boostBOOST_ROOTBOOST_LIBRARYDIRCMake将从这些变量生成CMAKE_INCLUDE_PATHCMAKE_LIBRARY_PATH。我通常将它们设置为环境变量;在您的情况下,它们应该是:

代码语言:javascript
复制
BOOST_ROOT C:/local/boost_1_73_0
BOOST_LIBRARYDIR C:/local/boost_1_73_0/lib64-msvc-14.2

假设lib64-msvc-14.2是用clang构建boost库的地方?!

注意:库二进制文件(如果构建为共享的话包括dll)应该位于名为lib64-msvc-14.2 lib的子目录中。

第二个问题是,您需要为boost构建program_options库,特别是clang库。

我只试过用clang构建一次clang,然后只能构建32位二进制文件,参见Building Boost with Clang “Failed to build Boost.build engine”。不过,那是18个月前的事了,从那以后情况可能有所改善。

请注意,我经常使用在Windows上构建的boost库( mingw (gcc) ),并且有CMake找不到boost的问题--参见:cmake FindBoost not finding Boost libraries when building with MinGW on Windows --如果您对clang有类似的问题,我不会感到惊讶。许多C++库和工具(包括CMake)假设,如果您在Windows上,那么您使用的是Visual Studio.

我建议先使用Visual构建,因为您已经拥有Visual 19 boost库二进制文件。我还建议将CMAKE_CXX_STANDARD设置为17,因为目前您正在将所有内容推向极限!:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65357626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档