我正在使用CMake和我使用yocto构建的自定义工具链。我有一个问题,工具链有目标机器的sysroot和构建机器的一个。
CMake只在构建系统sysroot中查找库。
例如我正在使用:
find_package(libxml2)
但它始终在构建系统sysroot中找到libxml2而不是目标sysroot。我怎么能告诉它只查看目标sysroot?
答案 0 :(得分:8)
如何告诉它只查看目标sysroot?
有一系列CMake变量CMAKE_FIND_ROOT_PATH_MODE_*
,可调整不同CMake命令的搜索策略:
BOTH 值表示搜索目标和主机(构建)路径。当未设置变量时,这也是默认行为。
仅值表示仅搜索目标。
从不值表示只搜索主机。
变量列表:
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY会影响find_library()
来电
CMAKE_FIND_ROOT_PATH_MODE_INCLUDE影响find_pach()
和find_file()
来电
CMAKE_FIND_ROOT_PATH_MODE_PACKAGE影响 CONFIG 模式下的find_package()
(搜索*Config.cmake
文件时)。
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM会影响find_program()
来电。
通常,具体的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_*
通常在工具链文件中设置。