【问题标题】:cmake using find_package() cross compilingcmake 使用 find_package() 交叉编译
【发布时间】:2017-05-08 17:21:33
【问题描述】:

我将 CMake 与我使用 yocto 构建的自定义工具链一起使用。不过我有一个问题,工具链有一个用于目标机器的 sysroot 和一个用于构建机器的。

CMake 仅在构建系统 sysroot 中不断查找库。

例如我正在使用:

find_package(libxml2)

但它总是在构建系统 sysroot 而不是目标 sysroot 中找到 libxml2。如何告诉它只查看目标 sysroot?

【问题讨论】:

    标签: cmake cross-compiling


    【解决方案1】:

    如何告诉它只查看目标系统根目录?

    有一个CMake变量族CMAKE_FIND_ROOT_PATH_MODE_*,针对不同的CMake命令调整搜索策略:

    • BOTH 值表示同时搜索 targethost(构建)路径。当未设置变量时,这也是默认行为。

    • ONLY 值表示只搜索target

    • NEVER 值表示,仅搜索 host

    变量列表:

    通常,具体的find_package() 调用可能会受到所有这些变量的影响。在搜索库的情况下,通常只设置 3 个就足够了:

    # 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_* 通常在工具链文件中设置。

    【讨论】:

    • 这正是我想要的!谢谢
    猜你喜欢
    • 2011-08-24
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多