gpt4 book ai didi

cmake - 对于cmake "include"命令,文件和模块有什么区别?

转载 作者:行者123 更新时间:2023-12-03 07:40:26 26 4
gpt4 key购买 nike

我使用了一些库,但我不想将它们构建为每个使用它们的项目的一部分。一个非常容易理解的例子是 LLVM,它有 78 个静态库。即使使用 cmake 代码在每个 cmakefile 中查找和导入这些内容也是过多的。

显而易见的解决方案似乎是使用“include”命令,并将 cmake 脚本的相关 block 提取到 *.cmake 文件中,并设置 CMAKE_MODULE_PATH 环境变量。

只不过它根本不起作用。 Cmake 找不到我在 include 命令中指定的文件。

偶尔,我什至尝试了多种方式在环境变量中指定路径 - 一次使用反斜杠,一次使用正斜杠...... - 并且我每次都重新启动命令提示符并检查环境变量是否存在并更正。

在 cmake 手册中,它有点暗示"file"与“模块”不同 - 只有模块会自动添加扩展名和搜索路径处理。但没有解释有什么区别。我猜想缺少的扩展可能就足够了(与标准模块一样),但显然还不够。

在手册中搜索“模块”并没有多大帮助,因为这个词似乎过载了。例如,模块也是使用LoadLibrary/dl_open加载的动态库。

任何人都可以解释一下在这种情况下文件和模块之间的区别是什么,以及我如何创建自己的模块以便 cmake include 命令可以找到并使用它?

我在 Windows 上使用 cmake 2.8.1。

编辑

我非常有信心这里的问题是不理解 cmake 应该如何工作。我认为我应该做的是编写find_package可以使用的东西。

就目前情况而言,我距离回答自己的问题还有一段距离。

最佳答案

我相信 CMake“模块”只是一个可以与 find_package 一起使用的文件。指示。也就是说,当您运行 find_package(Module) 时,它会在 MODULE_PATH 中搜索名为 FindModule.cmake 的文件。

也就是说,如果您包含一个没有扩展名的文件,它也会在您的 MODULE_PATH 中搜索该file.cmake。在我正在开发的 CMake 项目中,我的目录结构与您建议的非常相似。

+ root/
+ CMakeLists.txt
+ cmake/
| + FindMatlab.cmake
| + TestInline.cmake
| + stdint.cmake
+ src/
+ include/

在 CMakeLists.txt 中我有:

set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package (Matlab) # runs FindMatlab.cmake
include(TestInline) # defines a macro:
test_inline (CONFIG_C_INLINE)
include(stdint) # simply executes flat CMake code

也许您的问题是您正在尝试从环境中定义模块路径。相反,尝试简单地将其附加到您尝试访问模块/文件的 CMakeList

关于cmake - 对于cmake "include"命令,文件和模块有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3249459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com