Cmake, Boost'u bulamıyor


89

CMake kullanarak bir proje yapılandırmaya çalışıyorum, ancak belirtilen klasörde olsalar bile Boost kitaplıklarını bulamıyor. Ben belirttiniz Boost_INCLUDE_DIR, Boost_LIBRARYDIRve BOOST_ROOT, ama yine de CKağıt Boost bulmak mümkün olmadığını belirten bir hata alıyorum. Böyle bir hatanın sebebi ne olabilir?


Boost'un bazı sürümleri bayrağı kullanır Boost_INCLUDE_DIRve diğerleri bayrağı kullanır Boost_INCLUDEDIR( alt çizgi olmadan ). FindBoost.cmakeDosyanız için doğru olanı kontrol edebilirsiniz ,path-to-cmake/Modules/FindBoost.cmake
marcelosalloum

Bilginize, CMake desteğiyle destek oluşturuyorsanız kullanmalısınızfind_package(Boost CONFIG)
Dmitry Sazonov

Yanıtlar:


106

Doğru şekilde yaptığınızdan emin misiniz? Fikri CKağıt setleri olduğunu BOOST_INCLUDE_DIR, BOOST_LIBRARYDIRve BOOST_ROOTotomatik. Bunun gibi bir şey yapın CMakeLists.txt:

Yükseltme varsayılan bir konuma yüklenmemişse ve bu nedenle CMake tarafından bulunamıyorsa, CMake'ye şu şekilde nerede destek arayacağını söyleyebilirsiniz:

Tabii ki, bu iki satır olmak zorunda önceFIND_PACKAGE(Boost) in CMakeLists.txt.


36
Öyle ${Boost_INCLUDE_DIR}değil ${BOOST_INCLUDE_DIR}, vaka önemli.
Ihor Kaharlichenko


2
benim için çalışmıyor ...

1
Olması gerekmez BOOST_INCLUDEDIRmi?
2018

2
@IhorKaharlichenko, ancak BOOST_ROOT BOOST_ROOT olmalıdır. olağanüstü ! Tüm kılıflarla, deve kılıfıyla, tümü büyük harflerle, alt çizgiyle, alt
Duck Dodgers

54

FindBoost.cmakeDosyanın kendisini okuyarak daha fazla yardım alabilirsiniz . "Modüller" dizininizde bulunur.

İyi bir başlangıç ​​şudur set(Boost_DEBUG 1)- bu, desteğin nerede arandığı, ne aradığı hakkında pek çok bilgi verir ve neden bulamadığını açıklamaya yardımcı olabilir.

Ayrıca, BOOST_ROOTdoğru şekilde iyileşip iyileşmediğini anlamanıza da yardımcı olabilir .

FindBoost.cmakeAyrıca, artırmanın tam sürümü Mevcut Sürümler değişkenlerinde listelenmemişse de bazen sorunlar yaşanabilir. Bununla ilgili daha fazlasını okuyarak bulabilirsiniz FindBoost.cmake.

Son olarak, FindBoost.cmakegeçmişte bazı hatalar oldu. Deneyebileceğiniz bir şey FindBoost.cmake, CMake'nin en son sürümünün daha yeni bir sürümünü alıp birlikte proje klasörünüze yapıştırmaktır CMakeLists.txt- o zaman eski bir yükseltme sürümünüz olsa bile, yeni sürümü kullanacaktır.FindBoost.cmake . projenizin klasörü.

İyi şanslar.


10

Bir süre bu problemle kendim mücadele ettim. cmakeBoost'un adlandırma kuralını kullanarak Boost kitaplık dosyalarını aradığı ortaya çıktı; burada kitaplık adı, onu oluşturmak için kullanılan derleyici sürümünün bir işlevi. Boost kitaplıklarımız kullanılarak oluşturuldu GCC 4.9.1ve bu derleyici sürümü aslında sistemimizde mevcuttu; ancak, GCC 4.4.7aynı zamanda yüklendi. Olduğu gibi, cmake'nin FindBoost.cmakekomut dosyası GCC 4.4.7kurulumu yerine otomatik olarak algılamaktaydı GCC 4.9.1ve bu nedenle, gcc44dosya adlarında "yerine" yerine " " bulunan Boost kitaplık dosyalarını arıyordu.gcc49 " .

Basit düzeltme, cmake'yi Boost_COMPILER" -gcc49" olarak ayarlayarak GCC 4.9'un mevcut olduğunu varsaymaya zorlamaktı CMakeLists.txt. Bu değişiklikle birlikte, FindBoost.cmakeBoost kitaplık dosyalarımı aradım ve buldum.


7

Doğru sürüm yükseltme başlıklarının konumunu ileterek -DBOOST_INCLUDEDIRveya -DBOOST_ROOTbu konuma işaret ederek, CMake'in kullanmasını istediğiniz Boost sürümünü de belirtebilirsiniz.

Misal:

cmake -DBOOST_ROOT=/opt/latestboost

Bu, aynı sistemde birden fazla yükseltme sürümü olduğunda da yararlı olacaktır.


Teşekkürler, Windows için Avro derlemesiyle benim için çalıştı.
ggurov

Benim için çalıştı, bunu CMake GUI aracında Ortam olarak ayarlayarak ... Sonra Giriş Ekle, ardından BOOST_ROOT, C: \ Program Files \ PCL 1.11.1 \ 3rdParty \ Boost değeri (PCL Yükledim)
Richard Keene

5

Ayrıca benzer bir sorun yaşadım ve BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR ve BOOST_ROOT env değişkenlerinin mutlak yollar tutması gerektiğini keşfettim . HTH!


Evet. BOOST_ROOT ortamdaki göreli yol nedeniyle aynı sorunu yaşadım. Çok teşekkürler!
korst1k

2

makeUbuntu Trusty64 üzerinde Boost 1.66.0 sürümünü yükledikten sonra bir proje için çalıştırmaya çalışırken aynı sorunu yaşadım. Hata mesajı şuna benziyordu (tam olarak benzemiyordu):

Boost kesinlikle kuruldu, ancak CMake bunu algılayamadı. Yollar ve çevresel değişkenlerle uğraşmak için bolca zaman harcadıktan sonra, sonunda cmakeseçenekleri kontrol etmeye başladım ve aşağıdakileri buldum:

Bu yüzden söz konusu dizinde aşağıdakileri çalıştırdım:

sudo cmake --check-system-vars

geri döndü:

ve sorunu çözdü.


2

Cmake versiyonunun 3.1.0-rc2alması için boost 1.57belirtin-D_boost_TEST_VERSIONS=1.57

cmake version 3.1.0-rc2varsayılan boost<=1.56.0olarak görüldüğü gibi-DBoost_DEBUG=ON

cmake -D_boost_TEST_VERSIONS=1.57 -DBoost_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++


2

Kendi desteğinizi oluşturuyorsanız, kullanmayı unutmayın, --layout=versionedaksi takdirde belirli bir kütüphane sürümü için arama başarısız olur


1

Statik bağlantılı Boost ile özellikle CGAL oluşturmaya çalışan herkes için bir tavsiye daha . Tanımlamak yeterli değildir Boost_USE_STATIC_LIBS; zaman Boost_DEBUGdeğerini çıkardığında geçersiz kılınır . Burada yapılacak şey, "Gelişmiş" onay kutusunu işaretlemek ve etkinleştirmektir CGAL_Boost_USE_STATIC_LIBS.


1

Benim için bu hata basitçe, ubuntu'da yükseltme kurulu olmadığı için:

sudo apt install build-essential libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev


0

Aynı sorunu yaşadım ve yukarıdaki çözümlerden hiçbiri işe yaramadı. Aslında dosya include/boost/version.hppokunamadı (jenkins tarafından başlatılan cmake betiği tarafından).

(Boost) kitaplığının iznini manuel olarak değiştirmek zorunda kaldım (jenkins gruba ait olsa bile, ancak bu, jenkins ile bağlantılı, anlayamadığım başka bir sorundur):


0

Bu, CMAKE_FIND_ROOT_PATHfarklı olarak ayarlanmışsa da olabilir BOOST_ROOT. Ayara rağmen BOOST_ROOT, hatayı aldığımla aynı sorunla karşılaştım . Ancak ARM için çapraz derleme yapmak için Toolchain-android.cmake kullanıyordum (bazı nedenlerden dolayı):

CMAKE_FIND_ROOT_PATHBOOST_ROOTsoruna neden olan geçersiz kılıyor gibi görünüyor .


-1

Olabilir

sana yardım edeceğim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.