gpt4 book ai didi

windows - CMake 找不到 Boost 库

转载 作者:可可西里 更新时间:2023-11-01 12:19:02 25 4
gpt4 key购买 nike

我正在尝试使用 CMake 脚本在 Windows 上编译基于 Boost 的应用程序。仅 header 库工作正常,但 CMake 无法找到这些库(无法找到以下 Boost 库:boost_serialization)。 CMake 脚本的相关部分是:

# Path where CMake can find additional libraries
SET(CMAKE_PREFIX_PATH Libs)

# Boost
SET(Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0")
SET(Boost_USE_STATIC_LIBS ON)
find_package(Boost REQUIRED COMPONENTS serialization)

我的项目里面有一个名为“Libs”的文件夹,里面存放着DevIL、Boost等第三方库,所以先设置这个。它适用于仅 Devil 和 Boost header 的东西,所以我认为我不需要 BOOST_ROOT 变量。Boost 安装是我用 BJam 编译的来自 boost.org 的标准源代码分发版。 .这些库存储在 boost_1_47_0\bin.v2\libs 中,我在构建过程中没有进行任何更改。

我认为这有点奇怪,boost_1_47_0\libs 文件夹不包含任何库文件,但包含 BJam 文件和其他内容,但这应该不是问题,因为这似乎是从源代码在 Windows 上构建 Boost 的正常方法。

我查看了 FindBoost.cmake 文件的调试输出(我使用的是 CMake 2.8 的默认脚本),它似乎没有查看 bin.v2。相反,它会搜索 boost_ROOT/lib,但是当我将内容从 bin.v2\libs 复制到 lib 时,它仍然没有找到任何内容。

那么找到在其他具有通用 Boost 发行版的平台上也能工作的 Boost 的优雅方法是什么?

最佳答案

我会尝试在您的 CMakeLists.txt 文件中设置 BOOST_ROOT。我知道 CMake 2.8.6 会在您设置 Boost_ADDITIONAL_VERSIONS 变量时找到 Boost 1.47.0,因为当我设置了 BOOST_ROOT 时它适用于 Windows。

这是我在一个项目中的内容:

    set( BOOST_COMPONENTS_NEEDED serialization )    # The following verifyies that BOOST_ROOT is set properly.    if(NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "")        FILE( TO_CMAKE_PATH $ENV{BOOST_ROOT} BOOST_ROOT )        if( NOT EXISTS ${BOOST_ROOT} )            MESSAGE( STATUS  ${BOOST_ROOT} " does not exist. Checking if BOOST_ROOT was a quoted string.." )            STRING( REPLACE "\"" "" BOOST_ROOT ${BOOST_ROOT} )            if( EXISTS ${BOOST_ROOT} )                MESSAGE( STATUS "After removing the quotes " ${BOOST_ROOT} " was now found by CMake" )            endif( EXISTS ${BOOST_ROOT})        endif( NOT EXISTS ${BOOST_ROOT} )    # Save the BOOST_ROOT in the cache        if( NOT EXISTS ${BOOST_ROOT} )            MESSAGE( WARNING ${BOOST_ROOT} " does not exist." )        else(NOT EXISTS ${BOOST_ROOT})            SET (BOOST_ROOT ${BOOST_ROOT} CACHE STRING "Set the value of BOOST_ROOT to point to the root folder of your boost install." FORCE)            #SET (BOOST_INCLUDEDIR ${BOOST_ROOT}/Include)            #SET (BOOST_LIBRARYDIR ${BOOST_ROOT}/lib)        endif( NOT EXISTS ${BOOST_ROOT} )    endif(NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "")    if( WIN32 AND NOT BOOST_ROOT )        MESSAGE( WARNING "Please set the BOOST_ROOT environment variable." )    endif( WIN32 AND NOT BOOST_ROOT )    set(Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0")    set(Boost_DEBUG ON)    set(Boost_USE_STATIC_LIBS       OFF)    set(Boost_USE_MULTITHREADED      ON)    set(Boost_USE_STATIC_RUNTIME    OFF)    FIND_PACKAGE(Boost 1.47.0 COMPONENTS ${BOOST_COMPONENTS_NEEDED})    if(Boost_FOUND)        MESSAGE( STATUS "Setting up boost." )        include_directories(${Boost_INCLUDE_DIRS})        if(Boost_DEBUG)            MESSAGE( STATUS "BOOST Libraries " ${Boost_LIBRARIES} )            FOREACH(BOOST_COMPONENT ${BOOST_COMPONENTS_NEEDED})                STRING( TOUPPER ${BOOST_COMPONENT} BOOST_COMPONENT_UPCASE )                MESSAGE( STATUS "Boost " ${BOOST_COMPONENT} ": " ${Boost_${BOOST_COMPONENT_UPCASE}_LIBRARY} )                MESSAGE( STATUS "Boost " ${BOOST_COMPONENT} " Debug: " ${Boost_${BOOST_COMPONENT_UPCASE}_LIBRARY_DEBUG} )                MESSAGE( STATUS "Boost " ${BOOST_COMPONENT} " Release: " ${Boost_${BOOST_COMPONENT_UPCASE}_LIBRARY_RELEASE} )            ENDFOREACH(BOOST_COMPONENT)        endif(Boost_DEBUG)    endif(Boost_FOUND)

关于windows - CMake 找不到 Boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com