gpt4 book ai didi

c++ - 在某些情况下 CMake 找不到 Boost 的可能原因?

转载 作者:太空狗 更新时间:2023-10-29 20:55:24 25 4
gpt4 key购买 nike

我使用 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_DIRBOOSTROOTBOOST_INCLUDEDIR 都具有相同的效果。在尝试任何新内容之前,我还删除了构建目录中的所有内容。

此行为的可能原因是什么?我已经尝试在 FindBoost.cmake 脚本中直接打印 BOOST_ROOT,如下所示:

message("BOOST_ROOT: $ENV{BOOST_ROOT}")

具有预期的行为(编写 BOOST_ROOT:/path/to/boost)。

当然,我现在可以作弊,只需将 boost 文件夹链接到交叉编译器的 include 文件夹中,但这当然不好,我想找出是什么继续。

最佳答案

交叉编译时,工具链文件通常设置变量CMAKE_FIND_ROOT_PATH .结合CMAKE_FIND_ROOT_PATH_MODE_LIBRARY变量设置为 ONLYCMAKE_FIND_ROOT_PATH 变量用作 find_library 调用的有效 chroot,因此只有库 在给定的前缀下搜索

存在模拟变量来调整 find_path(用于搜索包含路径)和 find_program 的行为。

您使用的工具链文件实际上将 CMAKE_FIND_ROOT_PATH 设置为 line 1521 :

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)。

关于c++ - 在某些情况下 CMake 找不到 Boost 的可能原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35791251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com