Cmake ไม่พบ Boost


89

ฉันกำลังพยายามกำหนดค่าโปรเจ็กต์โดยใช้ CMake แต่ไม่พบไลบรารี Boost แม้ว่าจะอยู่ในโฟลเดอร์ที่ระบุก็ตาม ฉันได้ระบุBoost_INCLUDE_DIR, Boost_LIBRARYDIRและBOOST_ROOTแต่ฉันยังคงได้รับข้อผิดพลาดบอกว่า CMake ไม่สามารถที่จะหาเพิ่ม อะไรคือสาเหตุของข้อผิดพลาดดังกล่าว?


Boost บางเวอร์ชันใช้แฟล็กBoost_INCLUDE_DIRและเวอร์ชันอื่น ๆ ใช้แฟล็กBoost_INCLUDEDIR( ไม่มีขีดล่าง ) คุณสามารถตรวจสอบสิ่งที่ถูกต้องสำหรับกรณีของคุณได้โดยอ่านFindBoost.cmakeไฟล์ใต้path-to-cmake/Modules/FindBoost.cmake
marcelosalloum

FYI หากคุณกำลังสร้างการสนับสนุนด้วย CMake คุณควรใช้find_package(Boost CONFIG)
Dmitry Sazonov

คำตอบ:


106

แน่ใจหรือว่าทำถูกวิธี แนวคิดก็คือว่าชุด CMake BOOST_INCLUDE_DIR, BOOST_LIBRARYDIRและBOOST_ROOTโดยอัตโนมัติ ทำสิ่งนี้ในCMakeLists.txt:

หากไม่ได้ติดตั้งบูสต์ไว้ในตำแหน่งเริ่มต้นและไม่สามารถหาได้โดย CMake คุณสามารถบอก CMake ว่าจะหาบูสต์แบบนี้ได้ที่ไหน:

แน่นอนว่าทั้งสองเส้นจะต้องมีก่อนในFIND_PACKAGE(Boost)CMakeLists.txt


36
มันเป็น${Boost_INCLUDE_DIR}ไม่ได้${BOOST_INCLUDE_DIR}เรื่องกรณี
Ihor Kaharlichenko

3
อาจมีการเปลี่ยนแปลงใน cmake เวอร์ชันใหม่กว่า แต่นี่คือเอกสารอ้างอิง: cmake.org/cmake/help/v3.0/module/FindBoost.html
Nick Desaulniers

2
มันใช้ไม่ได้สำหรับฉัน ... มันพบไลบรารีเพิ่ม แต่สร้างข้อผิดพลาดมากมายในเวลารวบรวม

1
มันไม่ควร ' BOOST_INCLUDEDIR'?
dmedine

2
@IhorKaharlichenko แต่ BOOST_ROOT ควรเป็น BOOST_ROOT มหัศจรรย์! ให้ฉันลองกับทุกกรณีกรณีอูฐตัวพิมพ์ใหญ่ทั้งหมดมีขีดล่างไม่มีขีดล่าง ... <face-palm>
Duck Dodgers

54

มีความช่วยเหลือเพิ่มเติมโดยการอ่านFindBoost.cmakeไฟล์ อยู่ในไดเรกทอรี 'โมดูล' ของคุณ

การเริ่มต้นที่ดีคือการset(Boost_DEBUG 1)- สิ่งนี้จะกระจายข้อมูลจำนวนมากเกี่ยวกับตำแหน่งที่บูสต์กำลังมองหาสิ่งที่กำลังมองหาและอาจช่วยอธิบายได้ว่าทำไมมันไม่พบ

นอกจากนี้ยังสามารถช่วยให้คุณทราบว่ากำลังรับของคุณBOOST_ROOTอย่างเหมาะสมหรือไม่

FindBoost.cmakeบางครั้งก็มีปัญหาหากไม่มีการเพิ่มเวอร์ชันที่แน่นอนในตัวแปรเวอร์ชันที่พร้อมใช้งาน FindBoost.cmakeท่านสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้โดยการอ่าน

ล่าสุดFindBoost.cmakeมีข้อบกพร่องบางอย่างในอดีต สิ่งหนึ่งที่คุณอาจลองคือนำFindBoost.cmakeCMake เวอร์ชันล่าสุดออกจากเวอร์ชันล่าสุดและติดไว้ในโฟลเดอร์โปรเจ็กต์ของคุณควบคู่ไปCMakeLists.txt- แม้ว่าคุณจะมีการเพิ่มเวอร์ชันเก่า แต่ก็จะใช้เวอร์ชันใหม่FindBoost.cmakeที่อยู่ใน โฟลเดอร์โครงการของคุณ

โชคดี.


10

ฉันต่อสู้กับปัญหานี้มาระยะหนึ่งด้วยตัวเอง ปรากฎว่าcmakeกำลังมองหาไฟล์ไลบรารี Boost โดยใช้หลักการตั้งชื่อของ Boost ซึ่งชื่อไลบรารีเป็นฟังก์ชันของเวอร์ชันคอมไพเลอร์ที่ใช้สร้าง ไลบรารี Boost ของเราถูกสร้างขึ้นโดยใช้GCC 4.9.1และเวอร์ชันคอมไพเลอร์นั้นมีอยู่ในระบบของเรา อย่างไรก็ตามGCC 4.4.7ก็มีการติดตั้ง ในขณะที่มันเกิดขึ้นFindBoost.cmakeสคริปต์ของ cmake จะตรวจจับการGCC 4.4.7ติดตั้งโดยอัตโนมัติแทนการติดตั้งGCC 4.9.1ดังนั้นจึงมองหาไฟล์ไลบรารี Boost ที่มี " gcc44" ในชื่อไฟล์แทนที่จะเป็น " gcc49"

การแก้ไขที่ง่ายก็คือการบังคับ CMake ที่จะคิดว่า GCC 4.9 เป็นปัจจุบันโดยการตั้งค่าBoost_COMPILERที่ " -gcc49" CMakeLists.txtใน ด้วยการเปลี่ยนแปลงนี้ค้นหาFindBoost.cmakeและพบไฟล์ไลบรารี Boost ของฉัน


7

คุณยังสามารถระบุเวอร์ชันของ Boost ที่คุณต้องการให้ CMake ใช้โดยการส่งผ่าน-DBOOST_INCLUDEDIRหรือ-DBOOST_ROOTชี้ไปยังตำแหน่งของส่วนหัว Boost เวอร์ชันที่ถูกต้อง

ตัวอย่าง:

cmake -DBOOST_ROOT=/opt/latestboost

สิ่งนี้จะมีประโยชน์เมื่อมีการเพิ่มหลายเวอร์ชันในระบบเดียวกัน


ขอบคุณที่ทำงานให้ฉันกับ Avro build for Windows
ggurov

ทำงานให้ฉันตั้งค่าในเครื่องมือ CMake GUI เป็นสภาพแวดล้อม ... จากนั้นเพิ่มรายการตามด้วย BOOST_ROOT ค่า C: \ Program Files \ PCL 1.11.1 \ 3rdParty \ Boost (ฉันติดตั้ง PCL แล้ว)
Richard Keene

5

ฉันยังมีปัญหาที่คล้ายกันและพบว่า BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR และตัวแปร BOOST_ROOT env ต้องถือแน่นอนเส้นทาง เฮ้!


ใช่. มีปัญหาเดียวกันเนื่องจากเส้นทางสัมพัทธ์ใน BOOST_ROOT env ขอบคุณมากสำหรับคุณ!
korst1k

2

ฉันมีปัญหาเดียวกันขณะพยายามเรียกใช้makeโครงการหลังจากติดตั้ง Boost เวอร์ชัน 1.66.0 บน Ubuntu Trusty64 ข้อความแสดงข้อผิดพลาดคล้ายกับ (ไม่เหมือนทุกประการ) ข้อความนี้:

Boost ได้รับการติดตั้งอย่างแน่นอน แต่ CMake ตรวจไม่พบ หลังจากใช้เวลามากมายในการแก้ไขเส้นทางและตัวแปรสภาพแวดล้อมในที่สุดฉันก็ตรวจสอบcmakeตัวเลือกและพบสิ่งต่อไปนี้:

ดังนั้นฉันจึงรันสิ่งต่อไปนี้ในไดเรกทอรีที่มีปัญหา:

sudo cmake --check-system-vars

ซึ่งกลับมา:

และแก้ไขปัญหา


2

สำหรับรุ่น cmake ที่3.1.0-rc2จะเลือกboost 1.57ระบุ-D_boost_TEST_VERSIONS=1.57

cmake version 3.1.0-rc2ค่าเริ่มต้นboost<=1.56.0เป็นตามที่เห็นโดยใช้-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

หากคุณกำลังสร้างบูสต์ของคุณเองอย่าลืมใช้--layout=versionedมิฉะนั้นการค้นหาไลบรารีเวอร์ชันใดเวอร์ชันหนึ่งจะล้มเหลว


1

คำแนะนำอีกเล็กน้อยสำหรับทุกคนที่พยายามสร้างCGALโดยเฉพาะด้วย Boost ที่เชื่อมโยงแบบคงที่ มันไม่เพียงพอที่จะกำหนดBoost_USE_STATIC_LIBS; มันจะถูกแทนที่ด้วยเวลาที่Boost_DEBUGส่งออกค่าของมัน สิ่งที่ต้องทำที่นี่คือการตรวจสอบ "ขั้นสูง" CGAL_Boost_USE_STATIC_LIBSช่องทำเครื่องหมายและเพื่อให้


1

สำหรับฉันข้อผิดพลาดนี้เป็นเพียงเพราะไม่ได้ติดตั้งบูสต์บน Ubuntu:

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


0

ฉันมีปัญหาเดียวกันและวิธีแก้ปัญหาข้างต้นไม่ได้ผล จริงๆแล้วไฟล์include/boost/version.hppไม่สามารถอ่านได้ (โดยสคริปต์ cmake ที่เจนกินส์เปิดตัว)

ฉันต้องเปลี่ยนสิทธิ์ของไลบรารี (เพิ่ม) ด้วยตนเอง(แม้ว่าเจนกินส์จะอยู่ในกลุ่ม แต่นั่นก็เป็นอีกปัญหาหนึ่งที่เชื่อมโยงกับเจนกินส์ที่ฉันไม่สามารถเข้าใจได้):


0

นอกจากนี้ยังสามารถเกิดขึ้นได้หากมีการตั้งค่าที่แตกต่างกันจากCMAKE_FIND_ROOT_PATH BOOST_ROOTฉันประสบปัญหาเดียวกันทั้งๆที่ตั้งค่าไว้BOOST_ROOTแต่ฉันก็ได้รับข้อผิดพลาด แต่สำหรับการรวบรวมข้ามสำหรับ ARM ฉันใช้ Toolchain-android.cmake ซึ่งฉันมี (ด้วยเหตุผลบางประการ):

CMAKE_FIND_ROOT_PATHดูเหมือนจะลบล้างBOOST_ROOTซึ่งเป็นสาเหตุของปัญหา


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.