解释 CMake 如何找到 driver_ecspi_MIMX8ML8.cmake:
[2 tools called]
CMake 的 include() 通过 CMAKE_MODULE_PATH 查找文件。工作原理如下:
CMake include() 的查找机制
跳转到“CMake include() 的查找机制”1. 查找顺序
跳转到“1. 查找顺序”当执行 include(driver_ecspi_MIMX8ML8) 时,CMake 按以下顺序查找:
-
如果文件名包含路径分隔符(
/或\),直接使用该路径include(boards/armgcc/flags.cmake) # 直接使用相对路径 -
如果文件名不包含路径分隔符,在
CMAKE_MODULE_PATH中搜索include(driver_ecspi_MIMX8ML8) # 在 CMAKE_MODULE_PATH 中搜索
2. 在你的项目中的实际查找过程
跳转到“2. 在你的项目中的实际查找过程”查看你的 CMakeLists.txt:
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/SDK/devices/MIMX8ML8/utilities/debug_console_lite ${CMAKE_CURRENT_SOURCE_DIR}/SDK/devices/MIMX8ML8/drivers ${CMAKE_CURRENT_SOURCE_DIR}/SDK/devices/MIMX8ML8 ${CMAKE_CURRENT_SOURCE_DIR}/SDK/components/uart ${CMAKE_CURRENT_SOURCE_DIR}/SDK/components/lists ${CMAKE_CURRENT_SOURCE_DIR}/SDK/CMSIS/Core/Include ${CMAKE_CURRENT_SOURCE_DIR}/SDK/devices/MIMX8ML8/utilities)当执行 include(driver_ecspi_MIMX8ML8) 时,CMake 会:
- 在第 1 个目录查找:
SDK/devices/MIMX8ML8/utilities/debug_console_lite/driver_ecspi_MIMX8ML8.cmake(未找到) - 在第 2 个目录查找:
SDK/devices/MIMX8ML8/drivers/driver_ecspi_MIMX8ML8.cmake(找到)
3. 两种使用方式对比
跳转到“3. 两种使用方式对比”方式一:使用 CMAKE_MODULE_PATH(推荐)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/SDK/devices/MIMX8ML8/drivers)include(driver_ecspi_MIMX8ML8) # 简洁,不需要完整路径方式二:直接指定路径
include(${CMAKE_CURRENT_SOURCE_DIR}/SDK/devices/MIMX8ML8/drivers/driver_ecspi_MIMX8ML8)# 或者include(SDK/devices/MIMX8ML8/drivers/driver_ecspi_MIMX8ML8)4. 为什么使用 CMAKE_MODULE_PATH?
跳转到“4. 为什么使用 CMAKE_MODULE_PATH?”- 简洁:
include(driver_ecspi_MIMX8ML8)比完整路径更短 - 可维护:路径集中管理,修改时只需改一处
- 符合 CMake 约定:类似 C/C++ 的
#include <header.h>查找机制
5. 验证查找路径
跳转到“5. 验证查找路径”可以在 CMakeLists.txt 中添加调试信息:
# 查看 CMAKE_MODULE_PATH 的内容message(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
# 查看实际找到的文件路径include(driver_ecspi_MIMX8ML8)# CMake 会在找到文件时输出信息(如果文件中有 message())总结:CMAKE_MODULE_PATH 相当于 CMake 的“搜索路径列表”,include() 会在这些路径中查找 .cmake 文件,因此不需要写完整路径。
来源:CSDN 原文,首次发布于 2025-12-19。