boost的根目录($ENV{BOOST_ROOT})是
C:\Boost\boost_1_64_0
所有已编译的库(.dll,.lib)都在
C:\Boost\boost_1_64_0\lib64-msvc-14.1
它们都有boost_xxx和libboost_xxx。
我的cmake文件是
set(BOOST_ROOT "$ENV{BOOST_ROOT}")
set(BOOST_LIBRARYDIR "$ENV{BOOST_ROOT}/lib64-msvc-14.1")
message("${BOOST_ROOT}")
message("${BOOST_LIBRARYDIR}")
message("${Boost_INCLUDE_DIR}")
if(MSVC)
add_definitions(-DBOOST_ALL_NO_LIB)
add_definitions(-DBOOST_ALL_DYN_LINK)
endif()
find_package(Boost 1.64.0 COMPONENTS system filesystem program_options REQUIRED)
字符串
输出结果是
C:\Boost\boost_1_64_0
C:\Boost\boost_1_64_0/lib64-msvc-14.1
C:/Boost/boost_1_64_0
CMake Error at C:/Program Files/CMake/share/cmake-3.8/Modules/FindBoost.cmake:1842(message):
找不到请求的Boost库。
Boost版本:1.64.0
Boost包括路径:C:/Boost/boost_1_64_0
找不到以下Boost库:
boost_system
boost_filesystem
boost_program_options
型
找不到Boost库。您可能需要将BOOST_LIBRARYDIR设置为包含Boost库的目录,或将BOOST_ROOT设置为Boost的位置。调用堆栈(最新调用优先):
CMakeLists.txt:78(find_package)
CMake Error at CMakeLists.txt:84(message):未找到升压
有人能帮帮忙吗?我花了几个小时在这上面,但不知道为什么它不起作用。
4条答案
按热度按时间6l7fqoea1#
首先,您使用的是哪个CMake版本?最近,3.8.1 release中包含了一个回归修复--它是关于
BOOST_ROOT
中的反斜杠的。其次,如果您使用的是官方预构建的Windows二进制文件,则不需要指定任何其他内容(
BOOST_ROOT
除外)-FindBoost.cmake
也会尝试查找它们。(我不记得是什么版本了)。永远不要在你的
CMakeLists.txt
中做set(BOOST_ROOT...)
--只要通过-D
选项将此参数传递给cmake
run即可。更好的方法如下:字符串
使用导入的目标链接所需的Boost库,并修改每个目标的编译/链接器标志。请避免修改“全局”编译器/链接器选项--即使用相应的
target_xxx
命令,而不是add_definitions
等。oipij1gg2#
我使用下面的脚本使用CMake加载boost(使用Linux和Windows):
字符串
你可以看到我必须添加一些版本的Boost,因为我的CMake版本不知道最新版本。你的CMake版本是什么?也许是同一个问题。
kb5ga3dv3#
你的头呢?我认为它没有找到include目录(这是成功的必要条件)。
在你的cmake安装目录中搜索FindBoost.cmake,里面有很多有用的东西可以帮助你排除故障。
使用
set(Boost_DEBUG ON)
可以帮助您确定搜索哪些路径以及搜索哪些库的文件名。您可以使用set(Boost_INCLUDEDIRS ${BOOST_ROOT}/inc)
指定include目录(存储文件夹boost
的目录),尽管我刚才展示的是FindBoost.cmake搜索的地方之一。你不需要
set(BOOST_ROOT "$ENV{BOOST_ROOT}")
。如果你没有设置${BOOST_ROOT}
,FindBoost.cmake会为你做这个。请注意,如果您刚刚下载了boost,将归档文件解压缩到
${BOOST_ROOT}
并使用b2
编译,那么您的所有文件都在${BOOST_ROOT}/stage
中。这也是他们居住的好地方。如果您手动复制文件到其他地方,那么FindBoost可能会遇到一些麻烦。j0pj023g4#
在
CMake
中包含boost
的最基本方法是:CMakeLists.txt
字符串