cmake使用find_package()交叉编译

Don*_*now 3 cmake cross-compiling

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

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

例如我正在使用:

find_package(libxml2)
Run Code Online (Sandbox Code Playgroud)

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

Tsy*_*rev 8

我怎么能告诉它只查看目标sysroot?

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

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

  • ONLY值表示仅搜索目标.

  • 永远不会意味着,只搜索主机.

变量列表:

通常,具体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)
Run Code Online (Sandbox Code Playgroud)

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