web-dev-qa-db-ja.com

CmakeがBoostライブラリを見つけられない

私はCmakeを初めて使用し、C++でライブラリをブーストします。 boostと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)

Set(Boost_USE_STATIC_LIBS ON)も書いてみましたが、残念ながら役に立ちませんでした。提案は大歓迎です。ありがとう。

8
user1382494

あなたの設定は少し変で汚れています。特に次のようなもの:

ADD_DEFINITIONS(-DBoost_USE_STATIC_LIBS=ON)

C/C++プリプロセッサ定義ではありません!これは、CMakeがプロジェクトのBoostライブラリとのリンケージステージを定義する方法を制御するために使用されるCMake変数です。

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>の代わりに、ビルドするターゲットの名前(実行可能、静的/共有ライブラリなど)を入力します。

13

ブースト1.54.0は、いくつかのパッチを適用しないとVS2013でビルドできません。こちらもご覧ください 新しいVisual Studio 2013プレビューでブーストをビルドするにはどうすればよいですか?

正しく構築すれば、他のすべてが機能するはずです。

0
Vertexwahn