【发布时间】:2016-03-04 08:26:59
【问题描述】:
我使用 CMake (3.4.1) 根据 Boost 库构建了一个 C++ 项目。主机平台是 Linux,目标是该主机和 cross-build Android NDK。
我只使用了 Boost 头文件,而且我刚刚下载/提取了 boost 文件夹(而且我没有 /usr/include/boost 目录)。
在我的CMakeLists.txt 文件中,我像这样声明对 Boost 的依赖:
find_package(Boost 1.57 REQUIRED)
我这样配置我的构建:
BOOST_ROOT=/path/to/boost cmake ../src
对于我的 native 构建,这实际上工作。
当我现在以完全相同的方式配置构建时(仅指定更多环境变量和 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 文件夹中,但这当然不好,我想知道发生了什么。
【问题讨论】:
-
请提供工具链文件的内容。有几个工具链设置会影响
find_library和find_pathCMake 命令,这些命令通常用于Find*.cmake脚本。 -
我从 Qt Android CMake 项目中获取工具链文件:github.com/LaurentGomila/qt-android-cmake.git
标签: c++ linux boost cmake cross-platform