在某些情况下,CMake 找不到 Boost 的可能原因
Possible causes for Boost not being found by CMake in certain situations?
我使用 CMake (3.4.1) 根据 Boost 库构建了一个C++项目。主机平台是Linux,目标是主机和跨构建的Android NDK。
我只使用 Boost 头文件,我刚刚下载/提取了 boost 文件夹(我没有/usr/include/boost
目录)。
在我的CMakeLists.txt
文件中,我像这样声明对 Boost 的依赖关系:
find_package(Boost 1.57 REQUIRED)
我像这样配置我的构建:
BOOST_ROOT=/path/to/boost cmake ../src
这实际上适用于我的本机构建的预期。
当我现在以完全相同的方式配置构建(仅指定更多环境变量和CMAKE_TOOLCHAIN_FILE)时,CMake 给了我:
BOOST_ROOT=/path/to/boost JAVA_HOME=/bla/bla/bla
ANDROID_NDK=/bla/bla/bla
ANDROID_SDK=/bla/bla/bla
ANT=/usr/bin/ant
cmake ../src -DCMAKE_TOOLCHAIN_FILE=/bla/bla/android.toolchain.cmake
CMake Error at /usr/share/cmake/Modules/FindBoost.cmake:1247 (message):
Unable to find the requested Boost libraries.
Unable to find the Boost header files. Please set BOOST_ROOT to the root
directory containing Boost or BOOST_INCLUDEDIR to the directory containing
Boost's headers.
Call Stack (most recent call first):
CMakeLists.txt:4 (find_package)
所以我相信我为Android目标做了几乎相同的构建,但是为主机构建找到Boost的相同方法在这里不起作用。
我试图设置Boost_DIR
,BOOSTROOT
和BOOST_INCLUDEDIR
都具有相同的效果。此外,在尝试任何新内容之前,我已经删除了构建目录中的所有内容。
此行为的可能原因是什么?我已经尝试直接在FindBoost.cmake
脚本中打印BOOST_ROOT
,如下所示:
message("BOOST_ROOT: $ENV{BOOST_ROOT}")
具有预期的行为(写入BOOST_ROOT: /path/to/boost
)。
当然,我现在可以作弊,只需将boost
文件夹链接到交叉编译器的include
文件夹中,但这当然不是很好,我想找出发生了什么。
交叉编译时,工具链文件通常会设置变量CMAKE_FIND_ROOT_PATH。结合设置为 ONLY
的 CMAKE_FIND_ROOT_PATH_MODE_LIBRARY 变量,CMAKE_FIND_ROOT_PATH
变量用作find_library
调用的有效 chroot,因此只搜索给定前缀下的库。
存在模拟变量来调整find_path
(用于搜索包含路径)和find_program
的行为。
您使用的工具链文件实际上在第 1521 行设置了CMAKE_FIND_ROOT_PATH
:
set( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_ROOT}/bin"
"${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}"
"${ANDROID_SYSROOT}"
"${CMAKE_INSTALL_PREFIX}"
"${CMAKE_INSTALL_PREFIX}/share" )
下面设置CMAKE_FIND_ROOT_PATH_MODE_*
变量以ONLY
.因此,您需要在其中一个目录下安装 Boost,并提供与之相关的提示(如 BOOST_ROOT)。
请注意,Boost 应该为目标平台(在本例中为 Android NDK)构建,而不是针对交叉编译的平台(Linux)。
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- CMake 在 Windows 上的自定义位置上找不到 Boost
- 致命错误:找不到'boost/uuid/uuid.hpp'文件
- 找不到请求的Boost库
- CMake 找不到请求的 Boost 库
- C++ CMake 找不到 Boost 1.63(使用 CLion IDE)
- Boost 1.66.0 :找不到提升库:boost_system、boost_filesystem、boost_thr
- 使用 g++-8 编译时找不到 boost/asio/io_context.hpp
- Android Studio 找不到 Boost 标头
- Cmake找不到boost库文件,线程,date_time,iostreams,system
- std::runtime_error:解决方法:在 boost::asio 中找不到主机(权威)
- Rcpp 找不到 Boost 标头
- cmake FindBoost在Windows上使用MinGW构建时找不到Boost库
- CMake 找到了 Boost,但 Make 找不到包含文件
- 交叉编译用于ARM的MongoDB C++驱动程序.找不到Boost库
- 从源代码构建 MySQL 连接器/C++(找不到 Boost 库错误)
- G 找不到Boost库
- Cmake 找不到请求的 Boost 库.- boost_coroutine 1.53
- CMake:如果找不到,则自动进行Boost下载和构建
- Boost找不到未来::然后从演示