CMake忽略了CMAKE_MODULE_PATH

5
我有困难让CMake的include()语句识别CMAKE_MODULE_PATH。我希望像这样做:
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
include(Foo.cmake)

用这种目录树风格:
.
├── cmake
│   └── Foo.cmake
├── CMakeLists.txt

然而,我遇到了错误:
  include could not find load file:

    Foo.cmake

根据 include()CMAKE_MODULE_PATH 文档,我认为这应该是可以实现的。
如果我保持相同的树形结构但修改 include,它将正常加载:
include(cmake/Foo.cmake)

我是不是错了或者做错了什么?

谢谢!


@Tsyarev 非常感谢!你的第二个建议起了作用——搜索“Foo”而不是“Foo.cmake”。 - Kevin W Matthews
1个回答

6

这应该是一个模块的名称,没有.cmake的扩展名,用于应用CMAKE_MODULE_PATH变量,在使用include命令搜索文件时:

# 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)

include函数的签名:

include(<file|module> [OPTIONAL] [RESULT_VARIABLE ] [NO_POLICY_SCOPE])

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

当查找模块时,只会应用CMAKE_MODULE_PATH变量:

如果指定了一个模块而不是文件,则首先在CMAKE_MODULE_PATH中查找名称为<modulename>.cmake的文件,然后在CMake模块目录中查找。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接