【问题标题】:CMake: find_file() does not search recursivelyCMake:find_file() 不递归搜索
【发布时间】:2019-03-12 08:38:09
【问题描述】:

我正在尝试使用 arduino-cmake 框架,但我的 Arduino-SDK 未被正确识别。搜索原因发现如下:

        find_file(${PLATFORM}_BOARDS_PATH
            NAMES boards.txt
            PATHS ${PLATFORM_PATH}
            DOC "Path to Arduino boards definition file.")

其中${PLATFORM}_BOARDS_PATH 扩展为ARDUINO_BOARDS_PATH-NOTFOUNDPLATFORM_PATH 正确指向/opt/local/arduino-1.8.7/hardware/arduino,在里面你可以找到avr/boards.txt

所以一切似乎都很好,对吧?

find_file() 命令中的PATHS 更改为${PLATFORM_PATH}/avr 会得到正确的结果 - 所以看起来find_file 不会递归搜索。

我做错了什么? arduino-cmake 似乎正在为其他人工作,所以我想必须有一个解决方案而不改变这样的路径..

【问题讨论】:

  • 这是find_file 不递归搜索的预期行为。请注意,cmake/Platform/Arduino.cmake 明确描述了什么是平台目录(由PLATFORM_PATH 变量指定),请参见# register_hardware_platform(HARDWARE_PLATFORM_PATH) 及以下行。

标签: cmake arduino toolchain


【解决方案1】:

正如@Tsyvarev 指出的那样,find_file()find_path() 不会递归搜索。在许多情况下,您可以将这些命令替换为 file(GLOB_RECURSE ...) 命令(查看更多详细信息 here)。

在您的示例中,您可以编写如下内容:

file(GLOB_RECURSE ${PLATFORM}_BOARDS_PATH boards.txt)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2014-01-10
    • 2016-11-13
    相关资源
    最近更新 更多