【问题标题】:How can I add search paths outside CMAKE_SYSROOT for cmake's find_path?如何在 CMAKE_SYSROOT 之外为 cmake 的 find_path 添加搜索路径?
【发布时间】:2020-07-16 02:14:32
【问题描述】:

我正在使用具有以下内容的 cmake 工具链文件:

set(CMAKE_SYSROOT /path/to/toolchain/system/libraries)

# These are to make cmake use the toolchain and not accidentally use my system's includes/libraries
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
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_SYSROOT 之外添加一个单独的包含路径:

list(APPEND CMAKE_SYSTEM_INCLUDE_PATH /absolute/path/to/include)

但是find_path 根本不起作用。谢天谢地,我可以通过将-DCMAKE_FIND_DEBUG_MODE=ON 传递给 cmake 来调试它:

  find_path considered the following locations:

  /path/to/toolchain/system/libraries/absolute/path/to/include

  The item was not found.

那么问题是 CMAKE_SYSTEM_INCLUDE_PATH 与 CMAKE_SYSROOT 相关(docs 中没有说明)。我有哪些选择?是否可以设置另一个变量来将绝对搜索路径添加到find_path

CMAKE_FIND_ROOT_PATH 可以提供绝对路径,但 cmake 会为其附加我不想要的额外路径,例如 usr/bin/include 而不仅仅是直线路径。 ../ 的相对路径似乎也被过滤掉了。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    我尝试了这种可憎的方法,它似乎有效。我建议不要不惜一切代价这样做,因为它检查的路径比您想要的路径多...

    # In the cross compile toolchain file.
    # This is so find_path can find things in ABSOLUTE_INCLUDE_PATHS.
    foreach(PATH ${ABSOLUTE_INCLUDE_PATHS})
    get_filename_component(PARENT ${PATH} DIRECTORY)
    get_filename_component(LASTPART ${PATH} NAME)
    list(APPEND CMAKE_FIND_ROOT_PATH ${PARENT})
    list(APPEND CMAKE_SYSTEM_INCLUDE_PATH /${LASTPART})
    endforeach()
    

    这是因为CMAKE_FIND_ROOT_PATH 支持在CMAKE_SYSROOT 之外添加多个绝对路径。然而,它也添加了大量的路径后缀,而不检查路径本身。解决方案是将父目录添加为根目录,然后将LASTPART 添加为在根目录下搜索的众多组合之一。注意/。这将继续在所有其他根中搜索LASTPART

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2022-06-15
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多