boost($ ENV {BOOST_ROOT})的根目录是
C:\升压\ boost_1_64_0
所有已编译的库(.dll,.lib)都在
中C:\升压\ 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_1_64_0 / lib64下-MSVC-14.1
C:/ Boost / boost_1_64_0
C:/ Program的CMake错误 Files / CMake / share / cmake-3.8 / Modules / FindBoost.cmake:1842(消息):
无法找到请求的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)CMakeLists.txt上的CMake错误:84(消息):未找到提升
有人可以帮忙吗?我已经花了好几个小时,但无法弄清楚为什么这不起作用。
答案 0 :(得分:0)
首先,你使用什么CMake版本?最近,3.8.1 release中包含了一个回归修复程序 - 它是关于BOOST_ROOT
中的反斜杠。
其次,如果您使用官方预建的Windows二进制文件,则不需要指定任何其他内容(' cept可能是BOOST_ROOT
) - FindBoost.cmake
会尝试找到它们同样。 (不幸的是,我不记得那个版本。)
从不在set(BOOST_ROOT...)
中执行CMakeLists.txt
- 只需将此参数传递给cmake
通过-D
选项运行。更好的方法如下:
if(NOT DEFINED BOOST_ROOT AND NOT "${ENV{BOOST_ROOT}" STREQUAL "")
set(BOOST_ROOT "$ENV{BOOST_ROOT}")
endif()
使用导入的目标链接所需的Boost库并修改每个taget的编译/链接器标志。请避免修改" global"编译器/链接器选项 - 即使用相应的target_xxx
命令而不是add_definitions
&等
答案 1 :(得分:0)
我使用以下脚本通过CMake加载boost(使用Linux和Windows):
set(BoostPath "${DefaultBoostPath}" CACHE PATH "Path to Boost")
message(STATUS "Path to Boost: ${BoostPath}")
set(BOOST_ROOT "${BoostPath}")
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_NO_SYSTEM_PATHS ON)
set(Boost_ADDITIONAL_VERSIONS "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64")
find_package(Boost ${RequiredBoostVersion} REQUIRED COMPONENTS ${RequiredBoostComponents})
mark_as_advanced(FORCE Boost_DIR)
set(BoostVersion "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
message(STATUS "Boost version: ${BoostVersion}")
if(CompilerName STREQUAL "gcc")
set(System_LIBRARIES ${System_LIBRARIES} pthread rt)
endif()
你可以看到我必须添加一些版本的Boost,因为我的CMake版本不知道最新版本。 什么是你的CMake版本?也许这是同样的问题。
答案 2 :(得分:0)
你的标题在哪里?我不认为它找到了包含目录(这是成功所必需的)。
在cmake安装目录中搜索FindBoost.cmake,其中有许多有用的东西可供排除故障。
使用private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB
可以帮助您确定搜索哪些路径以及搜索库的文件名。您可以使用set(Boost_DEBUG ON)
指定包含目录(存储文件夹boost
的目录),尽管我刚刚展示的是FindBoost.cmake搜索的地方之一。
另外,您不需要set(Boost_INCLUDEDIRS ${BOOST_ROOT}/inc)
。如果你没有设置set(BOOST_ROOT "$ENV{BOOST_ROOT}")
,FindBoost.cmake会为你做这件事。
请注意,如果您刚下载了boost,则将归档解压缩到${BOOST_ROOT}
并使用${BOOST_ROOT}
进行编译,那么您的所有文件都在b2
中。这也是他们居住的好地方。如果你手动将文件复制到其他地方,那么FindBoost可能会遇到一些麻烦。