Cmake 引用boost庫時報錯 Could NOT find Boost (missing: filesystem)


在cmake-cookbook中,在Detecting the Boost libraries章節中,需要鏈接boost的filesystem library
源碼:https://github.com/dev-cafe/cmake-cookbook/tree/master/chapter-03/recipe-08
 
通過find_package FindBoost module 尋找boost庫, filesystem報錯
代碼 find_package(Boost 1.54 REQUIRED COMPONENTS filesystem)
 
首先我們下載boost, Boost Downloads,windows平台下載了boost_1_78_0.zip
解壓后得到下面的文件
 
下一步編譯,由於我沒有msvc,用的mingw64 gcc編譯,具體編譯教程請參考 Boost編譯與使用 - 知乎 (zhihu.com)
我就默認編譯的就得到下面,其中 boost文件夾里面時頭文件, .\stage\lib下是我們編譯好的library

 

 在cmake中運行報錯, missing: Boost_INCLUDE_DIR, 這個是boost 頭文件所在路徑。

具體可參考https://cmake.org/cmake/help/latest/module/FindBoost.html?highlight=findboost

CMake Error at D:/CMake/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Boost (missing: Boost_INCLUDE_DIR filesystem) (Required is
at least version "1.54")
Call Stack (most recent call first):
D:/CMake/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
D:/CMake/share/cmake-3.23/Modules/FindBoost.cmake:2375 (find_package_handle_standard_args)
CMakeLists.txt:19 (find_package)

於是我們設置 BOOST_ROOT  BOOST_INCLUDEDIR   BOOST_LIBRARYDIR
set(BOOST_ROOT "D:/Boost/boost_1_78_0")
set(BOOST_INCLUDEDIR "D:/Boost/boost_1_78_0/boost")
set(BOOST_LIBRARYDIR "D:/Boost/boost_1_78_0/stage/lib")
cmake -D BOOST_ROOT= "D:/Boost/boost_1_78_0"
cmake -D BOOST_INCLUDEDIR="D:/Boost/boost_1_78_0/boost" -D BOOST_LIBRARYDIR="D:/Boost/boost_1_78_0/stage/lib"

繼續執行發現報錯

Could NOT find Boost (missing: filesystem) (found suitable version
"1.78.0", minimum required is "1.54")

為了更加清楚發現問題,打開boost debug,再次執行源程序

set(Boost_DEBUG ON)
set(BOOST_ROOT "D:/Boost/boost_1_78_0")
set(BOOST_INCLUDEDIR "D:/Boost/boost_1_78_0/boost")
set(BOOST_LIBRARYDIR "D:/Boost/boost_1_78_0/stage/lib")
find_package(Boost 1.54 REQUIRED COMPONENTS filesystem)
在輸出中我們
 Searching for FILESYSTEM_LIBRARY_RELEASE: boost_filesystem-mgw11-mt-1_78;boost_filesystem-mgw11-mt;boost_filesystem-mgw11-mt;boost_filesystem-mt-1_78;boost_filesystem-mt;boost_filesystem-mt;boost_filesystem-mt;boost_filesystem
Searching for FILESYSTEM_LIBRARY_DEBUG: boost_filesystem-mgw11-mt-d-1_78;boost_filesystem-mgw11-mt-d;boost_filesystem-mgw11-mt-d;boost_filesystem-mt-d-1_78;boost_filesystem-mt-d;boost_filesystem-mt-d;boost_filesystem-mt;boost_filesystem
發現cmake在搜尋filesystem library得時候名字與我們的library不一樣,lib前綴  x64 x32后綴

 

 

於是我們添加Boost_LIB_PREFIX 和 Boost_ARCHITECTURE,具體含義詳見(兩次紅色的變化,多了lib前綴,x64后綴

https://cmake.org/cmake/help/latest/module/FindBoost.html?highlight=findboost

set(Boost_DEBUG ON)
set(BOOST_ROOT "D:/Boost/boost_1_78_0")
set(BOOST_INCLUDEDIR "D:/Boost/boost_1_78_0/boost")
set(BOOST_LIBRARYDIR "D:/Boost/boost_1_78_0/stage/lib")
set(Boost_LIB_PREFIX "lib")
set(Boost_ARCHITECTURE "-x64")

find_package(Boost 1.54 REQUIRED COMPONENTS filesystem)
最后成功

Searching for FILESYSTEM_LIBRARY_RELEASE: libboost_filesystem-mgw11-mt-x64-1_78;libboost_filesystem-mgw11-mt-x64;libboost_filesystem-mgw11-mt;libboost_filesystem-mt-x64-1_78;libboost_filesystem-mt-x64;libboost_filesystem-mt;libboost_filesystem-mt;libboost_filesystem

Searching for FILESYSTEM_LIBRARY_DEBUG: libboost_filesystem-mgw11-mt-d-x64-1_78;libboost_filesystem-mgw11-mt-d-x64;libboost_filesystem-mgw11-mt-d;libboost_filesystem-mt-d-x64-1_78;libboost_filesystem-mt-d-x64;libboost_filesystem-mt-d;libboost_filesystem-mt;libboost_filesystem

-- Found Boost: D:/Boost/boost_1_78_0 (found suitable version "1.78.0", minimum required is "1.54") found components: filesystem
-- boost include dirs: D:/Boost/boost_1_78_0
-- boost library dirs: D:/Boost/boost_1_78_0/stage/lib
-- Configuring done
-- Generating done
-- Build files have been written to: E:/computer_project/cmake-cookbook/chapter-03/recipe-08/cxx-example/build

 

 
 才學習CMake,遇到的問題也很多,希望這個能給大家帶來一點幫助或思路。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM