Cmake tidak menemukan Boost

89

Saya mencoba mengonfigurasi proyek menggunakan CMake, tetapi gagal menemukan pustaka Boost meskipun mereka berada di folder yang ditentukan. Saya telah menentukan Boost_INCLUDE_DIR, Boost_LIBRARYDIRdan BOOST_ROOT, tetapi saya masih mendapatkan kesalahan yang mengatakan bahwa CMake tidak dapat menemukan Boost. Apa yang mungkin menjadi penyebab kesalahan tersebut?

Ivan Gromov
sumber
Beberapa versi Boost menggunakan flag Boost_INCLUDE_DIRdan yang lainnya menggunakan flag Boost_INCLUDEDIR( tanpa garis bawah ). Anda dapat memeriksa yang tepat untuk kasus Anda dengan membaca FindBoost.cmakefile, di bawahpath-to-cmake/Modules/FindBoost.cmake
marcelosalloum
FYI, jika Anda membangun dorongan dengan dukungan CMake, Anda harus menggunakanfind_package(Boost CONFIG)
Dmitry Sazonov

Jawaban:

106

Apakah Anda yakin melakukannya dengan cara yang benar? Idenya adalah CMake mengatur BOOST_INCLUDE_DIR, BOOST_LIBRARYDIRdan BOOST_ROOTsecara otomatis. Lakukan sesuatu seperti ini di CMakeLists.txt:

Jika boost tidak dipasang di lokasi default dan tidak dapat ditemukan oleh CMake, Anda dapat memberi tahu CMake di mana mencari boost seperti ini:

Tentu saja, dua baris harus sebelum itu FIND_PACKAGE(Boost)di CMakeLists.txt.

fschmitt.dll
sumber
36
Hal ini ${Boost_INCLUDE_DIR}tidak ${BOOST_INCLUDE_DIR}, kasus penting.
Ihor Kaharlichenko
3
Mungkin ini telah berubah di versi yang lebih baru dari cmake, tetapi inilah dokumen referensinya: cmake.org/cmake/help/v3.0/module/FindBoost.html
Nick Desaulniers
2
itu tidak bekerja untuk saya ... Ia menemukan perpustakaan dorongan, tetapi menghasilkan banyak kesalahan pada waktu kompilasi
1
Bukankah seharusnya begitu ' BOOST_INCLUDEDIR'?
Dmedine
2
@IhorKaharlichenko, tetapi BOOST_ROOT harus BOOST_ROOT. hebat ! Izinkan saya mencoba dengan semua casing, casing unta, huruf besar semua, dengan garis bawah, tanpa garis bawah ... <face-palm>
Duck Dodgers
54

Ada lebih banyak bantuan yang tersedia dengan membaca FindBoost.cmakefile itu sendiri. Itu terletak di direktori 'Modules' Anda.

Awal yang baik adalah set(Boost_DEBUG 1)- ini akan memberikan banyak informasi tentang di mana dorongan mencari, apa yang dicari, dan dapat membantu menjelaskan mengapa tidak dapat menemukannya.

Ini juga dapat membantu Anda untuk mengetahui apakah itu sesuai BOOST_ROOTdengan Anda dengan benar.

FindBoost.cmaketerkadang juga mengalami masalah jika versi pendorong yang tepat tidak terdaftar di variabel Versi yang Tersedia. Anda dapat menemukan lebih banyak tentang ini dengan membaca FindBoost.cmake.

Terakhir, FindBoost.cmakememiliki beberapa bug di masa lalu. Satu hal yang mungkin Anda coba adalah mengambil versi yang lebih baru dari versi FindBoost.cmaketerbaru CMake, dan menempelkannya ke folder proyek Anda bersama CMakeLists.txt- bahkan jika Anda memiliki versi lama penguat, itu akan menggunakan versi baru FindBoost.cmakeyang ada di folder proyek Anda.

Semoga berhasil.

jangan cerah
sumber
10

Saya sendiri berjuang dengan masalah ini untuk sementara waktu. Ternyata yang cmakesedang mencari file library Boost menggunakan konvensi penamaan Boost, di mana nama library tersebut merupakan fungsi dari versi compiler yang digunakan untuk membangunnya. Library Boost kami dibuat menggunakan GCC 4.9.1, dan versi compiler itu sebenarnya ada di sistem kami; Namun, GCC 4.4.7kebetulan juga dipasang. Kebetulan, FindBoost.cmakeskrip cmake mendeteksi secara otomatis GCC 4.4.7instalasi dan bukan yang GCC 4.9.1, dan dengan demikian mencari file perpustakaan Boost dengan " gcc44" di nama file, bukan "gcc49 ".

Perbaikan sederhananya adalah memaksa cmake untuk menganggap bahwa GCC 4.9 ada, dengan menyetel Boost_COMPILERke " -gcc49" di CMakeLists.txt. Dengan perubahan ini, FindBoost.cmakemencari, dan menemukan, file library Boost saya.

Tom P.
sumber
7

Anda juga dapat menentukan versi Boost yang Anda inginkan untuk digunakan CMake dengan meneruskan -DBOOST_INCLUDEDIRatau-DBOOST_ROOT menunjuk ke lokasi header peningkatan versi yang benar

Contoh:

cmake -DBOOST_ROOT=/opt/latestboost

Ini juga akan berguna ketika beberapa versi peningkatan berada di sistem yang sama.

Skillachie
sumber
Terima kasih, itu berhasil untuk saya dengan Avro build untuk Windows.
ggurov
Bekerja untuk saya, mengaturnya di alat CMake GUI sebagai Lingkungan ... Kemudian Tambahkan Entri, lalu BOOST_ROOT, nilai C: \ Program Files \ PCL 1.11.1 \ 3rdParty \ Boost (Saya telah menginstal PCL)
Richard Keene
5

Saya juga memiliki masalah serupa dan menemukan bahwa variabel BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR dan BOOST_ROOT env harus memiliki jalur absolut . HTH!

sphakka.dll
sumber
Iya. Memiliki masalah yang sama karena jalur relatif di BOOST_ROOT env. Terima kasih banyak!
korst1k
2

Saya mengalami masalah yang sama ketika mencoba menjalankan makesebuah proyek setelah menginstal Boost versi 1.66.0 di Ubuntu Trusty64. Pesan kesalahannya mirip dengan (tidak persis seperti) yang ini:

Boost sudah pasti dipasang, tetapi CMake tidak dapat mendeteksinya. Setelah menghabiskan banyak waktu untuk mengutak-atik jalur dan variabel lingkungan, saya akhirnya memeriksa cmakesendiri untuk opsi dan menemukan yang berikut:

Jadi saya menjalankan yang berikut ini di direktori yang dipermasalahkan:

sudo cmake --check-system-vars

yang mengembalikan:

dan menyelesaikan masalah.

pengguna3006381
sumber
2

Untuk versi cmake 3.1.0-rc2untuk mengambil boost 1.57tentukan-D_boost_TEST_VERSIONS=1.57

cmake version 3.1.0-rc2default boost<=1.56.0seperti yang terlihat menggunakan-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++

Simon Allfrey
sumber
2

Jika Anda membangun boost Anda sendiri jangan lupa untuk menggunakan --layout=versionedjika tidak pencarian untuk versi perpustakaan tertentu akan gagal

Gaetano Mendola
sumber
1

Satu lagi saran bagi siapa pun yang mencoba membangun CGAL secara khusus, dengan Boost yang terhubung secara statis. Tidaklah cukup untuk mendefinisikan Boost_USE_STATIC_LIBS; ia ditimpa oleh waktu Boost_DEBUGmengeluarkan nilainya. Hal yang harus dilakukan di sini adalah mencentang kotak "Lanjutan" dan mengaktifkan CGAL_Boost_USE_STATIC_LIBS.

Philip
sumber
1

Bagi saya kesalahan ini hanya karena boost tidak dipasang di ubuntu:

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

bbs
sumber
0

Saya memiliki masalah yang sama, dan tidak ada solusi di atas yang berhasil. Sebenarnya, file tersebutinclude/boost/version.hpp tersebut tidak dapat dibaca (oleh skrip cmake yang diluncurkan oleh jenkins).

Saya harus mengubah izin pustaka (boost) secara manual (meskipun jenkins termasuk dalam grup, tetapi itu adalah masalah lain yang terkait dengan jenkins yang tidak dapat saya pahami):

PJ127
sumber
0

Ini juga dapat terjadi jika CMAKE_FIND_ROOT_PATHdisetel sebagai berbeda dari BOOST_ROOT. Saya menghadapi masalah yang sama meskipun dalam pengaturan BOOST_ROOT, saya mendapatkan kesalahan. Tetapi untuk kompilasi silang untuk ARM saya menggunakan Toolchain-android.cmake yang saya miliki (untuk beberapa alasan):

CMAKE_FIND_ROOT_PATHtampaknya menimpa BOOST_ROOTyang menyebabkan masalah.

Sabin
sumber
-1

Mungkin

akan membantumu.

yayu
sumber