繁体   English   中英

Cmake找不到Boost库

[英]Cmake cannot find Boost libraries

我是Cmake的新手,用C ++推动库。 我正在开发一个需要提升和Cmake的项目。 我使用的是Cmake版本2.8.11,MS Visual Studio 2013和Boost 1.54.0。 当我尝试从Cmake配置时,它给出以下错误:

CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1106     (message):
Unable to find the requested Boost libraries.

Boost version: 1.54.0

Boost include path: D:/boost_1_54_0

The following Boost libraries could not be found:

      boost_thread
      boost_system
      boost_log
      boost_log_setup
      boost_program_options

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:20 (find_package)

我已经看到了很多与我有关的问题并尝试过,但一切都是徒劳的。 我的Cmakelists.txt文件如下所示:

################################
# Boost
################################
ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)
ADD_DEFINITIONS(-DBoost_USE_STATIC_LIBS=ON)
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ON)
set(Boost_INCLUDE_DIR D:/boost_1_54_0)
set(Boost_LIBRARY_DIR D:/boost_1_54_0/stage/lib)
find_package( Boost 1.54.0 REQUIRED thread system log log_setup program_options)
find_package( Threads )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
LINK_DIRECTORIES(${Boost_LIBRARY_DIR})

设置Boost_DEBUG ON后的CMake输出如下:

[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:476 ]     _boost_TEST_VERSIONS = 1.56.0;1.56;1.55.0;1.55;1.54.0;1.54
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:478 ]     Boost_USE_MULTITHREADED = TRUE
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:480 ] Boost_USE_STATIC_LIBS = TRUE
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:482 ] Boost_USE_STATIC_RUNTIME = 
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:484 ] Boost_ADDITIONAL_VERSIONS = 
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:486 ] Boost_NO_SYSTEM_PATHS = 
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:538 ] Declared as CMake or Environmental Variables:
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:540 ]   BOOST_ROOT = D:/boost_1_54_0
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:542 ]   BOOST_INCLUDEDIR = 
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:544 ]   BOOST_LIBRARYDIR = 
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:546 ] _boost_TEST_VERSIONS = 1.56.0;1.56;1.55.0;1.55;1.54.0;1.54
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:615 ] Include debugging info:
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:617 ]   _boost_INCLUDE_SEARCH_DIRS =    D:/boost_1_54_0/include;D:/boost_1_54_0;PATHS;C:/boost/include;C:/boost;/sw/local/include
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:619 ]   _boost_PATH_SUFFIXES = boost-1_56_0;boost_1_56_0;boost/boost-1_56_0;boost/boost_1_56_0;boost-1_56;boost_1_56;boost/boost-1_56;boost/boost_1_56;boost-1_55_0;boost_1_55_0;boost/boost-1_55_0;boost/boost_1_55_0;boost-1_55;boost_1_55;boost/boost-1_55;boost/boost_1_55;boost-1_54_0;boost_1_54_0;boost/boost-1_54_0;boost/boost_1_54_0;boost-1_54;boost_1_54;boost/boost-1_54;boost/boost_1_54
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:639 ] location of version.hpp: D:/boost_1_54_0/boost/version.hpp
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:663 ] version.hpp reveals boost 1.54.0
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:739 ] guessed _boost_COMPILER = -vc120
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:749 ] _boost_MULTITHREADED = -mt
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:792 ] _boost_RELEASE_ABI_TAG = -
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:794 ] _boost_DEBUG_ABI_TAG = -gd
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:842 ] _boost_LIBRARY_SEARCH_DIRS = D:/boost_1_54_0/lib;D:/boost_1_54_0/stage/lib;D:/boost_1_54_0/lib;D:/boost_1_54_0/../lib;D:/boost_1_54_0/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:930 ] Searching for THREAD_LIBRARY_RELEASE: libboost_thread-vc120-mt-1_54;libboost_thread-vc120-mt;libboost_thread-mt-1_54;libboost_thread-mt;libboost_thread;libboost_thread-vc120-mt-s-1_54;libboost_thread-vc120-mt-s;libboost_thread-mt-s-1_54;libboost_thread-mt-s
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:966 ] Searching for THREAD_LIBRARY_DEBUG: libboost_thread-vc120-mt-gd-1_54;libboost_thread-vc120-mt-gd;libboost_thread-mt-gd-1_54;libboost_thread-mt-gd;libboost_thread-mt;libboost_thread;libboost_thread-vc120-mt-s-gd-1_54;libboost_thread-vc120-mt-s-gd;libboost_thread-mt-s-gd-1_54;libboost_thread-mt-s-gd
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:930 ] Searching for SYSTEM_LIBRARY_RELEASE: libboost_system-vc120-mt-1_54;libboost_system-vc120-mt;libboost_system-mt-1_54;libboost_system-mt;libboost_system;libboost_system-vc120-mt-s-1_54;libboost_system-vc120-mt-s;libboost_system-mt-s-1_54;libboost_system-mt-s
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:966 ] Searching for SYSTEM_LIBRARY_DEBUG: libboost_system-vc120-mt-gd-1_54;libboost_system-vc120-mt-gd;libboost_system-mt-gd-1_54;libboost_system-mt-gd;libboost_system-mt;libboost_system;libboost_system-vc120-mt-s-gd-1_54;libboost_system-vc120-mt-s-gd;libboost_system-mt-s-gd-1_54;libboost_system-mt-s-gd
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:930 ] Searching for LOG_LIBRARY_RELEASE: libboost_log-vc120-mt-1_54;libboost_log-vc120-mt;libboost_log-mt-1_54;libboost_log-mt;libboost_log;libboost_log-vc120-mt-s-1_54;libboost_log-vc120-mt-s;libboost_log-mt-s-1_54;libboost_log-mt-s
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:966 ] Searching for LOG_LIBRARY_DEBUG: libboost_log-vc120-mt-gd-1_54;libboost_log-vc120-mt-gd;libboost_log-mt-gd-1_54;libboost_log-mt-gd;libboost_log-mt;libboost_log;libboost_log-vc120-mt-s-gd-1_54;libboost_log-vc120-mt-s-gd;libboost_log-mt-s-gd-1_54;libboost_log-mt-s-gd
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:930 ] Searching for LOG_SETUP_LIBRARY_RELEASE: libboost_log_setup-vc120-mt-1_54;libboost_log_setup-vc120-mt;libboost_log_setup-mt-1_54;libboost_log_setup-mt;libboost_log_setup;libboost_log_setup-vc120-mt-s-1_54;libboost_log_setup-vc120-mt-s;libboost_log_setup-mt-s-1_54;libboost_log_setup-mt-s
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:966 ] Searching for LOG_SETUP_LIBRARY_DEBUG: libboost_log_setup-vc120-mt-gd-1_54;libboost_log_setup-vc120-mt-gd;libboost_log_setup-mt-gd-1_54;libboost_log_setup-mt-gd;libboost_log_setup-mt;libboost_log_setup;libboost_log_setup-vc120-mt-s-gd-1_54;libboost_log_setup-vc120-mt-s-gd;libboost_log_setup-mt-s-gd-1_54;libboost_log_setup-mt-s-gd
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:930 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: libboost_program_options-vc120-mt-1_54;libboost_program_options-vc120-mt;libboost_program_options-mt-1_54;libboost_program_options-mt;libboost_program_options;libboost_program_options-vc120-mt-s-1_54;libboost_program_options-vc120-mt-s;libboost_program_options-mt-s-1_54;libboost_program_options-mt-s
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:966 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: libboost_program_options-vc120-mt-gd-1_54;libboost_program_options-vc120-mt-gd;libboost_program_options-mt-gd-1_54;libboost_program_options-mt-gd;libboost_program_options-mt;libboost_program_options;libboost_program_options-vc120-mt-s-gd-1_54;libboost_program_options-vc120-mt-s-gd;libboost_program_options-mt-s-gd-1_54;libboost_program_options-mt-s-gd
[ C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1017 ] Boost_FOUND = 1
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1106  (message):
Unable to find the requested Boost libraries.

Boost version: 1.54.0

Boost include path: D:/boost_1_54_0

The following Boost libraries could not be found:

      boost_thread
      boost_system
      boost_log
      boost_log_setup
      boost_program_options

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:26 (find_package)

我也试过写集(Boost_USE_STATIC_LIBS ON),但不幸的是它没有帮助。 建议是最受欢迎的。 谢谢。

您的配置看起来有点奇怪和肮脏。 尤其是:

ADD_DEFINITIONS(-DBoost_USE_STATIC_LIBS=ON)

它不是C / C ++预处理器定义! 它是一个CMake变量,用于控制CMake如何使用Boost库定义项目的链接阶段。

如果你正确编译了Boost并且没有弄乱任何东西,那么目录结构通常如下所示:

<boost-dir>
  include
    boost
      accumulators
      ...
      aligned_storage.hpp
      ...
  lib
    libboost_atomic-mt-s.a
    ...

注意:在您的情况下,Boost的根目录<boost-dir>似乎是D:/boost_1_54_0

如果在你的情况下它看起来不像上面那么,那么我建议手动将其重新排列到上面的那个,因为再一次,这应该是它应该如何。

完成后,让我们做一些CMake配置。 我建议首先保持简单和干净,并遵守CMake惯例。 测试以下内容:

set(BOOST_INCLUDEDIR D:/boost_1_54_0/include)
set(BOOST_LIBRARYDIR D:/boost_1_54_0/lib)

注意:您可以在FindBoost.cmake顶部找到这两个变量的详细说明。

set(Boost_USE_STATIC_LIBS   ON)
set(Boost_USE_MULTITHREADED ON)

注意:这是通过正确设置CMake变量来强制执行静态链接的方式,但不像您通过设置不存在的C / C ++预处理器定义那样强制执行静态链接。

find_package(Boost
             1.54.0
             COMPONENTS thread
                        system
                        log
                        log_setup
                        program_options
             REQUIRED)

include_directories(${Boost_INCLUDE_DIRS})

target_link_libraries(<target_name> ${Boost_LIBRARIES})

注意:不要使用<target_name> ,而是放置要构建的目标的名称(可执行文件,静态/共享库等)。

如果不应用某些补丁,则无法使用VS2013构建Boost 1.54.0。 另请参见此处如何使用新的Visual Studio 2013预览版构建增强功能?

如果你正确构建它,其他一切都应该工作。

在lib文件夹中,重命名:
libboost_thread-vc100-mt-1_49.libboost_thread-vc100-mt-1_49.lib
libboost_thread-vc100-mt-gd-1_49.libboost_thread-vc100-mt-gd-1_49.lib
... 等等。 然后他们就可以找到了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM