cmake - 使用find_package()交叉编译

标签 cmake cross-compiling

我将CMake与使用yocto构建的自定义工具链一起使用。但是我有一个问题,工具链的目标计算机为sysroot,构建机器为sysroot。

CMake只会在构建系统sysroot中查找库。

例如我正在使用:

find_package(libxml2)

但是,它始终会在构建系统sysroot中而不是目标sysroot中找到libxml2。如何告诉它仅查看目标sysroot?

最佳答案

如何告诉它仅查看目标sysroot?

有一系列CMake变量CMAKE_FIND_ROOT_PATH_MODE_*,它可以针对不同的CMake命令调整搜索策略:

  • BOTH值意味着同时搜索目标路径和主机(构建)路径。当未设置变量时,这也是默认行为。
  • ONLY值表示仅搜索目标。
  • NEVER值表示仅搜索主机。

  • 变量列表:
  • CMAKE_FIND_ROOT_PATH_MODE_LIBRARY影响find_library()调用
  • CMAKE_FIND_ROOT_PATH_MODE_INCLUDE影响find_path()find_file()调用
  • CMAKE_FIND_ROOT_PATH_MODE_PACKAGE在CONFIG模式下影响find_package()(当搜索*Config.cmake文件时)。
  • CMAKE_FIND_ROOT_PATH_MODE_PROGRAM影响find_program()调用。

  • 通常,具体的find_package()调用可能会受到所有这些变量的影响。在搜索库的情况下,通常仅设置三个库就足够了:
    # Search libraries only under *target* paths.
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
    

    变量CMAKE_FIND_ROOT_PATH_MODE_*通常在工具链文件中设置。

    关于cmake - 使用find_package()交叉编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41294056/

    相关文章:

    c++ - CMake 链接失败

    python-3.x - 使用 CMake 为 Python 3 构建 SimpleITK

    Qt 嵌入式编译错误。修复 "Error: no such instruction"错误

    android - 是否可以将 LLVM 库编译为 android/ARM

    树莓派的交叉编译——包括来自同步文件系统的库

    c++ - CMake 和 CTest : automatically run test's dependencies

    visual-studio - 如何使用 CMake 和 Visual Studio 设置路径环境变量来运行测试

    cross-compiling - 使用 aarch64-none 代替 aarch64-elf 会在裸机中产生任何好处吗?

    cross-compiling - 使用 fcntl.h : error: 'close' was not declared in this scope 的 ARM 交叉编译错误

    cmake - 使用 CMake 和 PkgConfig 链接库