cmake使用find_package()交叉编译

时间:2016-12-23 01:33:52

标签: cmake cross-compiling

我正在使用CMake和我使用yocto构建的自定义工具链。我有一个问题,工具链有目标机器的sysroot和构建机器的一个。

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

例如我正在使用:

find_package(libxml2)

但它始终在构建系统sysroot中找到libxml2而不是目标sysroot。我怎么能告诉它只查看目标sysroot?

1 个答案:

答案 0 :(得分:8)

  

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

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

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

  • 值表示仅搜索目标

  • 从不值表示只搜索主机

变量列表:

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