CMake 忽略 CMAKE_MODULE_PATH

Kev*_*ews 5 cmake include

我无法识别 CMake 的include()声明CMAKE_MODULE_PATH. 我希望做这样的事情:

\n\n
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")\ninclude(Foo.cmake)\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用这种风格的目录树:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Foo.cmake\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,我收到错误:

\n\n
  include could not find load file:\n\n    Foo.cmake\n
Run Code Online (Sandbox Code Playgroud)\n\n

基于include()和的文档CMAKE_MODULE_PATH文档,我认为这应该是可能的。

\n\n

如果我保留同一棵树但修改include,它会加载正常:

\n\n
include(cmake/Foo.cmake)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我错了还是做错了什么?

\n\n

谢谢!

\n

Tsy*_*rev 6

它应该是一个模块名称 -不带 扩展名 - 用于在使用命令搜索文件时.cmake应用变量:CMAKE_MODULE_PATHinclude

# This searches a *module* and uses 'CMAKE_MODULE_PATH' variable
include(Foo)
# This searches a *file* and doesn't use 'CMAKE_MODULE_PATH' variable
include(Foo.cmake)
Run Code Online (Sandbox Code Playgroud)

include函数的签名

include(<文件|模块> [可选] [RESULT_VARIABLE] [NO_POLICY_SCOPE])

意味着它的第一个参数可以是文件模块

并且仅在搜索模块CMAKE_MODULE_PATH时应用变量:

<modulename>.cmake如果指定了模块而不是文件,则首先在 中搜索具有名称的文件CMAKE_MODULE_PATH,然后在 CMake 模块目录中搜索。

文件名- <modulename>.cmake- 表明模块名称不应有.cmake后缀。