cmake没有findboost库

我试图使用cmake skript在Windows上编译基于boost的应用程序。 只有头文件库工作正常,但cmakes无法find库(以下Boost库无法find: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,所以我首先设置了这个文件夹。 工作正常的恶魔和提高头只东西,所以我想我不应该需要BOOST_ROOTvariables。 升压安装是我使用bjam编译的boost.org的标准源码分发。 库存储在boost_1_47_0 \ bin.v2 \ libs中,我没有改变任何东西在构build过程中。 我认为这有点奇怪,boost_1_47_0 \ libs文件夹不包含任何库文件,但BJAM文件和其他的东西,但这应该不是一个问题,因为这缝是从Windows上build立提升的正常方法来源。

我查看了FindBoost.cmake的Debug输出(我使用CMake 2.8的默认脚本),并且没有缝到bin.v2。 相反,它searchboost_ROOT / lib,但是当我从bin.v2 \ libs的内容复制到lib它仍然没有find任何东西。

那么,寻找提升的优雅方法是什么呢?这个方法也适用于其他普通最差分布的平台吗?

Solutions Collecting From Web of "cmake没有findboost库"

我会尝试在你的CMakeLists.txt中设置BOOST_ROOT。 我知道当设置Boost_ADDITIONAL_VERSIONS变量时,CMake 2.8.6会找到boost 1.47.0,因为当我设置了BOOST_ROOT的时候,它对我有用。

以下是我在1个项目中所拥有的:


    设置(BOOST_COMPONENTS_NEEDED序列化)

     #以下验证BOOST_ROOT设置正确。
     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}“不存在,检查BOOST_ROOT是否是带引号的字符串..”)
             STRING(REPLACE“\”“”“BOOST_ROOT $ {BOOST_ROOT}) 
            如果(EXISTS $ {BOOST_ROOT}) 
                 MESSAGE(STATUS“删除引号后”CMake“找到$ {BOOST_ROOT}”)
             endif(EXISTS $ {BOOST_ROOT})
         endif(NOT EXISTS $ {BOOST_ROOT})

     #将BOOST_ROOT保存在缓存中
         if(NOT EXISTS $ {BOOST_ROOT}) 
             MESSAGE(警告$ {BOOST_ROOT}“不存在。”)
        其他(不存在$ {BOOST_ROOT})
             SET(BOOST_ROOT $ {BOOST_ROOT} CACHE STRING“将BOOST_ROOT的值设置为指向升级安装的根文件夹”FORCE)
             #SET(BOOST_INCLUDEDIR $ {BOOST_ROOT} /包含)
             #SET(BOOST_LIBRARYDIR $ {BOOST_ROOT} / lib)
         endif(NOT EXISTS $ {BOOST_ROOT})

     endif(NOT BOOST_ROOT AND NOT $ ENV {BOOST_ROOT} STREQUAL“”)

    如果(WIN32 AND NOT BOOST_ROOT)
         MESSAGE(警告“请设置BOOST_ROOT环境变量。”)
     endif(WIN32和NOT BOOST_ROOT)

    设置(Boost_ADDITIONAL_VERSIONS“1.47”“1.47.0”)
    设置(Boost_DEBUG ON)
    设置(Boost_USE_STATIC_LIBS OFF)
    设置(Boost_USE_MULTITHREADED ON)
    设置(Boost_USE_STATIC_RUNTIME关闭)
     FIND_PACKAGE(Boost 1.47.0 COMPONENTS $ {BOOST_COMPONENTS_NEEDED})
    如果(Boost_FOUND)
        消息(状态“设置提升”)
         include_directories($ {} Boost_INCLUDE_DIRS)
        如果(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)

那么,我解决了这个问题,但是我对我的解决方案并不满意。 在我看来,问题是,BJAM创建一个复杂的文件夹结构。 现在我只是将库文件从“boost_1_47_0 \ bin.v2 \ libs \ serialization \ build \ msvc-9.0 \ debug \ link-static \ threading-multi”复制到“boost_1_47_0 \ lib”。 我必须手工完成这个工作,但是我没有使用那么多的boost库,所以这个步骤对我来说是可以的。 我将把我的解决方案记录在cmake脚本之外,所以其他用户也应该相处。

我以前遇到过这个问题。 由于某些原因,b2(aka bjam)创建了带有“lib”的boost库。 cmake脚本将不会查找名为libboost_thread.lib的文件它只会找到boost_thread.lib 。 删除前面的lib和cmake应该找到它们。

您可以将以下选项添加到cmake的命令行,以告诉CGAL使用静态boost库:

 -DCGAL_Boost_USE_STATIC_LIBS=true 

来到这里有一个类似的问题,只是想说我的修复是相似的,但不完全一样。 我的安装前缀是C:\ lib \ boost \ boost_1_57_0。 我设置了一个指向该目录的BOOST_ROOT环境变量,但CMake(3.1.0)仍然找不到标题。 我意识到默认安装到C:\ lib \ boost \ boost_1_57_0 \ include \ boost-1_57 \ boost。 我不打算运行多个版本,所以我只是把最后一个boost目录移到了一个目录下,并删除了boost-1_57目录,并在这里结尾:

 C:\lib\boost\boost_1_57_0\include\boost 

CMake找到了一切。