web-dev-qa-db-fra.com

Cmake ne trouve pas les librairies Boost

Je suis nouveau sur Cmake et booster les bibliothèques en C++. Je travaille sur un projet qui a besoin de boost et de Cmake. J'utilise la version 2.8.11 de Cmake, MS Visual Studio 2013 et Boost 1.54.0. Quand j'essaye de configurer de Cmake, il donne l'erreur suivante:

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)

J'ai vu pas mal de questions liées aux miennes et essayées, mais toutes ont été vaines. Mon fichier Cmakelists.txt ressemble à ceci:

################################
# 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})

La sortie CMake après le réglage de Boost_DEBUG ON est la suivante:

[ 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)

J'ai également essayé d'écrire ensemble (Boost_USE_STATIC_LIBS ON), mais malheureusement, cela n'a pas aidé. Les suggestions sont les bienvenues. Merci.

8
user1382494

Votre configuration semble un peu bizarre et sale. Surtout des choses comme:

ADD_DEFINITIONS(-DBoost_USE_STATIC_LIBS=ON)

Ce n'est pas une définition de préprocesseur C/C++! C'est une variable CMake qui permet de contrôler la manière dont CMake définira l'étape de liaison de votre projet avec les bibliothèques Boost.

Si vous avez correctement compilé Boost et que vous n'avez rien gâché, la structure de répertoires ressemble généralement à ceci:

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

NOTE: Le répertoire racine de Boost, <boost-dir>, semble être D:/boost_1_54_0 dans votre cas.

Si, dans votre cas, cela ne ressemble pas à ce qui précède, je suggérerais de le réorganiser manuellement en fonction de celui ci-dessus, car, encore une fois, c’est ce qui devrait être.

Une fois terminé, faisons une configuration de CMake. Je suggère de garder les choses simples et propres en premier lieu, et d'obéir aux conventions de CMake. Testez les éléments suivants:

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

NOTE: Vous pouvez trouver une description détaillée de ces deux variables en haut de FindBoost.cmake.

set(Boost_USE_STATIC_LIBS   ON)
set(Boost_USE_MULTITHREADED ON)

REMARQUE: Voici comment vous appliquez le couplage statique en définissant la variable CMake correctement, mais pas comme vous le faites en définissant une définition de pré-processeur C/C++ non existante.

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})

NOTE: Au lieu de <target_name>, entrez le nom de la cible que vous souhaitez construire (exécutable, bibliothèque statique/partagée, etc.).

11
Alexander Shukaev

Boost 1.54.0 ne peut pas être construit avec VS2013 sans appliquer certains correctifs. Voir aussi ici Comment puis-je augmenter avec la nouvelle version de Visual Studio 2013?

Si vous le construisez correctement, tout le reste devrait fonctionner.

0
Vertexwahn