我想在Boost
上使用Windows
库,但是这样做很麻烦。我从here下载了Windows
软件包,并将其解压缩到C:\Boost
:
我在CMake
文件中添加了以下内容:
find_package(Boost 1.68 REQUIRED COMPONENTS filesystem)
# ...
target_link_libraries(MyExecutable ${Boost_LIBRARIES})
我遇到以下CMake
错误:
C:\Users\User\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\183.4284.104\bin\cmake\win\bin\cmake.exe -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/mingw32-make.exe" "-DCMAKE_C_COMPILER=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-gcc.exe" "-DCMAKE_CXX_COMPILER=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-g++.exe" -G "CodeBlocks - MinGW Makefiles" D:\Cpp\MyProject
CMake Error at C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:2048 (message):
Unable to find the requested Boost libraries.
Boost version: 1.68.0
Boost include path: C:/Boost
Could not find the following Boost libraries:
boost_filesystem
Some (but not all) of the required Boost libraries were found. You may
need to install these additional Boost libraries. Alternatively, set
BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
to the location of Boost.
Call Stack (most recent call first):
CMakeLists.txt:6 (find_package)
-- Configuring incomplete, errors occurred!
See also "D:/Cpp/MyProject/cmake-build-debug/CMakeFiles/CMakeOutput.log".
[Failed to reload]
它显然找不到filesystem
,但是它在C:\Boost\boost\filesystem
中(here是FindBoost
上的文档)。
如何设置CMake
文件以正确使用Boost
?我也尝试设置Boost
环境变量,但仍然无法正常工作:
SET (BOOST_ROOT "c:/Boost")
SET (BOOST_INCLUDEDIR "c:/Boost/boost")
SET (BOOST_LIBRARYDIR "c:/Boost/libs")
FIND_PACKAGE(Boost 1.68.0 REQUIRED COMPONENTS filesystem)
答案 0 :(得分:2)
另外,Boost说大多数东西都不需要编译,所以我没有这么做。
找不到库 boost :: filesystem。因为boost :: filesystem是需要编译的少数几个库之一(必须在find软件包命令中指定的所有库中都有要编译)。
您需要先建立增强功能:
./booststrap.sh
然后:
bjam
它将选择可用的编译器,因此您可能必须手动设置适当的工具集。
答案 1 :(得分:1)
不完全相关,但是我认为您的链接行不正确,而不是:
target_link_libraries(MyExecutable Boost::filesystem)
它应该说:
target_link_libraries(MyExecutable ${Boost_LIBRARIES})
一旦找到Boost,就会自动定义Boost_LIBRARIES ,因此它是免费的。
答案 2 :(得分:0)
仅当find_package包含COMPONENTS部分并且该宏实际上在磁盘上找到这些库时,CMake FindBoost宏才会填充Boost_Libraries。
所以在这里我要说我需要找到Boost,并且它必须具有文件系统
find_package(Boost 1.66.0 REQUIRED COMPONENTS filesystem)
宏然后尝试为文件系统构造一堆潜在的文件名(如果需要共享版本,调试,多线程等,请考虑在内)并在Boost_ROOT下搜索那些名称。如果找不到该文件,则可能会出错,并且不会填写Boost_Libraries。
如果有疑问,请在find_packages()之前在您的CMake中添加这样的行,以查看宏正在寻找的库并与您实际拥有的库进行比较:
set (Boost_DEBUG ON)
对我来说,我发现我有一个Boost,它放置了libs的-x32和-x64体系结构版本,例如“ libboost_system-mgw92-mt-x64-1_66.a”。宏没有在要查找的文件名中填充架构前缀,但失败了。
我必须添加这样的行才能为宏提供我想要哪个版本的线索:
set (Boost_ARCHITECTURE "-x64")
之后,$ {Boost_Libraries}正确扩展了,我能够正确地使用它进行链接了。