2013-10-10 16 views
8

Sono nuovo di Cmake e potenzia le librerie in C++. Sto lavorando a un progetto che ha bisogno di aumentare e Cmake. Sto usando Cmake versione 2.8.11, MS Visual Studio 2013 e Boost 1.54.0. Quando provo a configurare da cmake, sta dando il seguente errore:Cmake non trova le librerie Boost

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) 

Ho visto un bel paio di domande relative al mio e provato, ma tutto è andato invano. Il mio file CMakeLists.txt si presenta così:

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

L'uscita CMake dopo aver regolato in Boost_DEBUG ON è il seguente:

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

Ho anche provato a scrivere insieme (Boost_USE_STATIC_LIBS ON), ma purtroppo non ha fatto Aiuto. I suggerimenti sono i benvenuti. Grazie.

+2

Hai provato a impostare BOOST_ROOT prima di chiamare find_package? –

+0

Sì, l'ho impostato usando 'set (BOOST_ROOT D:/boost_1_54_0)' prima di chiamare find_package nel file CMakeLists.txt, ma ho ottenuto lo stesso errore. – user1382494

+0

Se si aggiunge 'set (Boost_DEBUG ON)' a CMakeLists.txt, si dovrebbe ottenere molto più output di debug quando si esegue nuovamente. Se hai ancora l'errore dopo questo, puoi incollare l'output di CMake nella tua domanda per farci vedere per favore? – Fraser

risposta

12

La tua configurazione sembra un po 'strana e sporca. Soprattutto cose come:

ADD_DEFINITIONS(-DBoost_USE_STATIC_LIBS=ON) 

Non è una definizione di preprocessore C/C++! È una variabile CMake che viene utilizzata per controllare come CMake definirà la fase di collegamento del progetto con le librerie Boost.

Se si è compilato correttamente Boost e non l'hai fatto rovinare nulla, allora la struttura delle directory di solito si presenta così:

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

NOTA: La directory principale del Boost, <boost-dir>, sembra essere in D:/boost_1_54_0 il tuo caso.

Se nel tuo caso non sembra come sopra, quindi suggerirei di riorganizzare manualmente quello sopra visto che, ancora una volta, è così che dovrebbe essere.

Al termine, eseguiamo la configurazione di CMake. Suggerisco di mantenere le cose semplici e pulite in primo luogo e di rispettare le convenzioni di CMake. Prova il seguente:

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

NOTA: Potete trovare descrizione approfondita di entrambe le variabili nella parte superiore del FindBoost.cmake.

set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON) 

NOTA: Questo è come si far rispettare il collegamento statico impostando la variabile CMake correttamente, ma non come avete fatto impostando una definizione preprocessore inesistente 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}) 

NOTA: Invece di <target_name>, mettere il nome della destinazione che si desidera costruire (eseguibile, statico/libreria condivisa, etc.).

+0

Dato che Op costruisce sotto VS, i suoi file di libreria probabilmente finivano sotto 'stage' invece di' lib'. Detto questo, impostare qualcosa di diverso da "BOOST_ROOT" all'interno di CMake è già più o meno un problema. – ComicSansMS

+0

@ComicSansMS: Certo che lo è. Ma gli sto dando un suggerimento su come testare se il suo setup dovrebbe funzionare. L'impostazione esplicita dei percorsi all'interno di 'CMakeLists.txt' è in effetti contro le raccomandazioni generali e lascerò cadere una nota al riguardo e modificherò la mia risposta con un'opzione migliore non appena l'autore confermerà che almeno questo funziona per lui. A proposito, anche l'impostazione di 'BOOST_ROOT' è una cattiva pratica. Tutte queste variabili di suggerimento del percorso devono essere impostate durante l'invocazione di CMake perché dipendono esclusivamente dall'ambiente corrente. –

+0

@Haroogan: Grazie mille per la risposta dettagliata. Attualmente ho dovuto formattare la mia macchina e sto affrontando alcuni problemi riguardanti alcune attività. Tornerò su questo non appena avrò sistemato quella cosa. Grazie ancora per la tua pazienza. – user1382494

-4

Nella cartella lib, rinominare:
libboost_thread-vc100-mt-1_49.lib-boost_thread-vc100-mt-1_49.lib
libboost_thread-vc100-mt-gd-1_49.lib a boost_thread-vc100-mt-gd-1_49.lib
... e così via. Quindi possono essere trovati.