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_LIBRARYDIR
dan BOOST_ROOT
, tetapi saya masih mendapatkan kesalahan yang mengatakan bahwa CMake tidak dapat menemukan Boost. Apa yang mungkin menjadi penyebab kesalahan tersebut?
89
Boost_INCLUDE_DIR
dan yang lainnya menggunakan flagBoost_INCLUDEDIR
( tanpa garis bawah ). Anda dapat memeriksa yang tepat untuk kasus Anda dengan membacaFindBoost.cmake
file, di bawahpath-to-cmake/Modules/FindBoost.cmake
find_package(Boost CONFIG)
Jawaban:
Apakah Anda yakin melakukannya dengan cara yang benar? Idenya adalah CMake mengatur
BOOST_INCLUDE_DIR
,BOOST_LIBRARYDIR
danBOOST_ROOT
secara otomatis. Lakukan sesuatu seperti ini diCMakeLists.txt
:FIND_PACKAGE(Boost) IF (Boost_FOUND) INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}) ADD_DEFINITIONS( "-DHAS_BOOST" ) ENDIF()
Jika boost tidak dipasang di lokasi default dan tidak dapat ditemukan oleh CMake, Anda dapat memberi tahu CMake di mana mencari boost seperti ini:
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost") SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
Tentu saja, dua baris harus sebelum itu
FIND_PACKAGE(Boost)
diCMakeLists.txt
.sumber
${Boost_INCLUDE_DIR}
tidak${BOOST_INCLUDE_DIR}
, kasus penting.BOOST_INCLUDEDIR
'?Ada lebih banyak bantuan yang tersedia dengan membaca
FindBoost.cmake
file 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_ROOT
dengan Anda dengan benar.FindBoost.cmake
terkadang juga mengalami masalah jika versi pendorong yang tepat tidak terdaftar di variabel Versi yang Tersedia. Anda dapat menemukan lebih banyak tentang ini dengan membacaFindBoost.cmake
.Terakhir,
FindBoost.cmake
memiliki beberapa bug di masa lalu. Satu hal yang mungkin Anda coba adalah mengambil versi yang lebih baru dari versiFindBoost.cmake
terbaru CMake, dan menempelkannya ke folder proyek Anda bersamaCMakeLists.txt
- bahkan jika Anda memiliki versi lama penguat, itu akan menggunakan versi baruFindBoost.cmake
yang ada di folder proyek Anda.Semoga berhasil.
sumber
Saya sendiri berjuang dengan masalah ini untuk sementara waktu. Ternyata yang
cmake
sedang 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 menggunakanGCC 4.9.1
, dan versi compiler itu sebenarnya ada di sistem kami; Namun,GCC 4.4.7
kebetulan juga dipasang. Kebetulan,FindBoost.cmake
skrip cmake mendeteksi secara otomatisGCC 4.4.7
instalasi dan bukan yangGCC 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_COMPILER
ke "-gcc49
" diCMakeLists.txt
. Dengan perubahan ini,FindBoost.cmake
mencari, dan menemukan, file library Boost saya.sumber
Anda juga dapat menentukan versi Boost yang Anda inginkan untuk digunakan CMake dengan meneruskan
-DBOOST_INCLUDEDIR
atau-DBOOST_ROOT
menunjuk ke lokasi header peningkatan versi yang benarContoh:
cmake -DBOOST_ROOT=/opt/latestboost
Ini juga akan berguna ketika beberapa versi peningkatan berada di sistem yang sama.
sumber
Saya juga memiliki masalah serupa dan menemukan bahwa variabel BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR dan BOOST_ROOT env harus memiliki jalur absolut . HTH!
sumber
Saya mengalami masalah yang sama ketika mencoba menjalankan
make
sebuah proyek setelah menginstal Boost versi 1.66.0 di Ubuntu Trusty64. Pesan kesalahannya mirip dengan (tidak persis seperti) yang ini: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 sudah pasti dipasang, tetapi CMake tidak dapat mendeteksinya. Setelah menghabiskan banyak waktu untuk mengutak-atik jalur dan variabel lingkungan, saya akhirnya memeriksa
cmake
sendiri untuk opsi dan menemukan yang berikut:Jadi saya menjalankan yang berikut ini di direktori yang dipermasalahkan:
sudo cmake --check-system-vars
yang mengembalikan:
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
dan menyelesaikan masalah.
sumber
Untuk versi cmake
3.1.0-rc2
untuk mengambilboost 1.57
tentukan-D_boost_TEST_VERSIONS=1.57
cmake version 3.1.0-rc2
defaultboost<=1.56.0
seperti 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++
sumber
Jika Anda membangun boost Anda sendiri jangan lupa untuk menggunakan
--layout=versioned
jika tidak pencarian untuk versi perpustakaan tertentu akan gagalsumber
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 waktuBoost_DEBUG
mengeluarkan nilainya. Hal yang harus dilakukan di sini adalah mencentang kotak "Lanjutan" dan mengaktifkanCGAL_Boost_USE_STATIC_LIBS
.sumber
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
sumber
Saya memiliki masalah yang sama, dan tidak ada solusi di atas yang berhasil. Sebenarnya, file tersebut
include/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):
chmod o+wx ${BOOST_ROOT} -R # allow reading/execution on the whole library #chmod g+wx ${BOOST_ROOT} -R # this did not suffice, strangely, but it is another story I guess
sumber
Ini juga dapat terjadi jika
CMAKE_FIND_ROOT_PATH
disetel sebagai berbeda dariBOOST_ROOT
. Saya menghadapi masalah yang sama meskipun dalam pengaturanBOOST_ROOT
, saya mendapatkan kesalahan. Tetapi untuk kompilasi silang untuk ARM saya menggunakan Toolchain-android.cmake yang saya miliki (untuk beberapa alasan):set(BOOST_ROOT "/home/.../boost") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=${SYSROOT}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --sysroot=${SYSROOT} -I${SYSROOT}/include/libcxx") set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}") set(CMAKE_FIND_ROOT_PATH "${SYSROOT}")
CMAKE_FIND_ROOT_PATH
tampaknya menimpaBOOST_ROOT
yang menyebabkan masalah.sumber
Mungkin
akan membantumu.
sumber