CMakeを使用してプロジェクトを構成しようとしていますが、指定されたフォルダーにあるにもかかわらずBoostライブラリを見つけることができません。 Boost_INCLUDE_DIR、Boost_LIBRARYDIR、BOOST_ROOTを指定しましたが、CMakeがBoostを見つけられないというエラーが表示されます。そのようなエラーの原因は何ですか?
あなたはそれを正しい方法でやっていると確信していますか?これは、CMakeがBOOST_INCLUDE_DIR、BOOST_LIBRARYDIR、およびBOOST_ROOTを自動的に設定するという考え方です。 CMakeLists.txtで次のようなことを行います。
FIND_PACKAGE(Boost)
IF (Boost_FOUND)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()
boostがデフォルトの場所にインストールされていないためにcmakeで検出できない場合は、次のようにboostを探す場所をcmakeに指示できます。
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
もちろん、これらの2行はbefore CMakeLists.txtのFIND_PACKAGE(Boost)でなければなりません
FindBoost.cmakeファイル自体を読むと、さらにヘルプが利用できます。 「モジュール」ディレクトリにあります。
良いスタートは、設定することです(Boost_DEBUG 1)-これは、ブーストが探している場所、探しているものに関する多くの情報を吐き出し、それが見つからない理由を説明するのに役立ちます。
また、BOOST_ROOTで適切に取得されているかどうかを判断するのにも役立ちます。
Boostの正確なバージョンがAvailable Versions変数にリストされていない場合、FindBoost.cmakeにも問題が生じることがあります。これについては、FindBoost.cmakeを参照してください。
最後に、FindBoost.cmakeには過去にいくつかのバグがありました。試してみたいことの1つは、最新バージョンのcmakeからFindBoost.cmakeの新しいバージョンを取り出し、CMakeLists.txtと一緒にプロジェクトフォルダーに貼り付けることです。その後、古いバージョンのboostを使用している場合でも、プロジェクトのフォルダーにあるFindBoost.cmakeの新しいバージョン。
幸運を。
私はこの問題にしばらく苦労しました。 cmake
は、Boostの命名規則を使用してBoostライブラリファイルを探していました。この命名規則では、ライブラリ名は、ビルドに使用されたコンパイラバージョンの関数です。 BoostライブラリはGCC 4.9.1
を使用して構築され、そのコンパイラバージョンは実際にシステムに存在していました。ただし、GCC 4.4.7
もインストールされました。たまたま、cmakeのFindBoost.cmake
スクリプトはGCC 4.4.7
の代わりにGCC 4.9.1
のインストールを自動検出していたため、「gcc44
」のBoostライブラリファイルを探していました「gcc49
」ではなくファイル名。
簡単な修正は、Boost_COMPILER
で-gcc49
を "CMakeLists.txt
"に設定することにより、cmakeにGCC 4.9が存在することを強制することでした。この変更により、FindBoost.cmake
はBoostライブラリファイルを探して見つけました。
-DBOOST_INCLUDEDIRまたは-DBOOST_ROOTに正しいバージョンブーストヘッダーの場所を指定することで、CMakeで使用するBoostのバージョンを指定することもできます。
例:
cmake -DBOOST_ROOT=/opt/latestboost
これは、同じシステム上に複数のブーストバージョンがある場合にも役立ちます。
同様の問題もあり、BOOST_INCLUDE_DIR、BOOST_LIBRARYDIR、BOOST_ROOTのenv変数はabsoluteパスを保持する必要があることを発見しました。 HTH!
独自のブーストを構築する場合は、-layout = versionedを使用することを忘れないでください。そうしないと、ライブラリの特定のバージョンの検索が失敗します
Cmakeバージョン3.1.0-rc2でブースト1.57を選択するには、-D_boost_TEST_VERSIONS = 1.57を指定します
-DBoost_DEBUG = ONを使用して見られるように、cmakeバージョン3.1.0-rc2はデフォルトでboost <= 1.56.0になります
cmake -D_boost_TEST_VERSIONS = 1.57 -DBoost_DEBUG = ON -DCMAKE_BUILD_TYPE = Debug -DCMAKE_C_COMPILER = clang -DCMAKE_CXX_COMPILER = clang ++
Boostバージョン1.66.0をUbuntu Trusty64にインストールした後、プロジェクトでmake
を実行しようとしたときに同じ問題が発生しました。エラーメッセージは次のようなものでした(まったく同じではありません)。
CMake Error at
/usr/local/Cellar/cmake/3.3.2/share/cmake/Modules/FindBoost.cmake:1245 (message):
Unable to find the requested Boost libraries.
Boost version: 0.0.0
Boost include path: /usr/include
Detected version of Boost is too old. Requested version was 1.36 (or newer).
Call Stack (most recent call first):
CMakeLists.txt:10 (FIND_PACKAGE)
Boostは確実にインストールされましたが、CMakeはそれを検出できませんでした。パスと環境変数をいじくり回した後、最終的にcmake
自体のオプションをチェックし、次のことがわかりました。
--check-system-vars = Find problems with variable usage in system files
そこで、問題のディレクトリで次のコマンドを実行しました。
Sudo cmake --check-system-vars
返された:
Also check system files when warning about unused and uninitialized variables.
-- Boost version: 1.66.0
-- Found the following Boost libraries:
-- system
-- filesystem
-- thread
-- date_time
-- chrono
-- regex
-- serialization
-- program_options
-- Found Git: /usr/bin/git
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/myproject
そして問題を解決しました。
特に静的にリンクされたBoostで CGAL を構築しようとする人のためのもう1つのアドバイス。 Boost_USE_STATIC_LIBS
;を定義するだけでは不十分です。 Boost_DEBUG
が値を出力するまでにオーバーライドされます。ここで行うことは、「詳細」チェックボックスをチェックし、CGAL_Boost_USE_STATIC_LIBS
を有効にすることです。