CMake入门教程【核心篇】引用子模块.cmake文件(include)

发布时间:2024年01月03日

在这里插入图片描述

😈「CSDN主页」传送门
😈「Bilibil首页」传送门
😈「本文的内容」:CMake入门教程
😈「动动你的小手」点赞👍收藏??评论📝


include子模块

要在CMake中引用子模块的.cmake文件,可以使用include()命令。include()命令用于包含并执行指定的CMake脚本文件。

假设你的子模块文件名为submodule.cmake,位于与主CMakeLists.txt文件相同的目录中,你可以在主CMakeLists.txt文件中使用以下命令引用该子模块:

include(submodule.cmake)

如果子模块文件位于主CMakeLists.txt文件的上级目录中,你可以使用相对路径引用子模块:

include(../submodule.cmake)

如果子模块文件位于不同的目录中,你可以使用绝对路径引用子模块:

include(/path/to/submodule.cmake)

请确保在引用子模块文件之前,子模块文件已经存在,并包含了你需要的定义、函数或宏等内容。

举个例子

以下是一个简单的示例,演示如何在CMake中引用子模块的.cmake文件。

假设你有以下目录结构:

project/
  |- CMakeLists.txt
  |- submodule/
       |- submodule.cmake

首先,创建主CMakeLists.txt文件,并引用子模块文件:

cmake_minimum_required(VERSION 3.12)
project(MyProject)

# 引用子模块
include(submodule/submodule.cmake)

# 主项目的设置和构建逻辑
...

然后,在submodule目录中创建submodule.cmake文件,并在其中定义一些内容:

# submodule.cmake

# 定义一个函数
function(print_message)
    message("Hello from submodule!")
endfunction()

# 定义一个变量
set(SUBMODULE_VARIABLE "This is a submodule variable")

现在,当你构建主项目时,子模块文件将被引用并执行。你可以在主项目的构建过程中使用子模块中定义的函数和变量。例如,在主CMakeLists.txt中添加以下内容:

# 主项目的设置和构建逻辑

# 调用子模块中的函数
print_message()

# 使用子模块中的变量
message("Submodule variable: ${SUBMODULE_VARIABLE}")

当你执行CMake构建时,你将看到以下输出:

Hello from submodule!
Submodule variable: This is a submodule variable

这个例子展示了如何在CMake中引用子模块的.cmake文件,并使用子模块中定义的函数和变量。你可以根据自己的需求扩展和修改子模块文件的内容。

include 优先级

在CMake中,include()命令用于包含其他CMake脚本文件。当指定文件名时,CMake会按照特定的搜索路径来查找该文件。

CMake的搜索路径包括以下几个位置:

  1. 当前源代码目录:CMake会首先在当前源代码目录中搜索指定的文件。
  2. CMake模块路径:CMake会搜索预定义的模块路径,这些路径包括CMake的安装路径、系统级的CMake模块路径以及用户自定义的CMake模块路径。可以通过设置CMAKE_MODULE_PATH变量来添加自定义的CMake模块路径。
  3. 环境变量:CMake还会搜索名为CMAKE_INCLUDE_PATH的环境变量中指定的路径。
  4. 系统默认路径:CMake会搜索系统默认的CMake模块路径,这些路径包括操作系统特定的CMake模块目录。

如果要引用一个子模块中的文件,可以在include()命令中使用相对路径或绝对路径来指定文件的位置。例如:

include(submodule/file.cmake)
include(/path/to/submodule/file.cmake)

这样可以明确指定要包含的文件的位置,而不依赖于搜索路径。

总之,CMake会按照上述搜索路径的顺序查找要包含的文件,如果找到匹配的文件,就会将其包含到当前的CMake脚本中。

include简写

在CMake中,include()命令的括号内可以不写.cmake扩展名。CMake会自动搜索指定的文件,并将其包含到当前的CMake脚本中。

因此,你可以这样写:

include(submodule)

这将引用名为submodule.cmake的文件,并将其包含到当前的CMake脚本中。CMake会搜索与给定名称匹配的文件,并自动添加.cmake扩展名。

请注意,如果存在多个与给定名称匹配的文件,CMake将按照特定的搜索顺序选择其中之一。如果你想确保引用的是特定的文件,建议在include()命令中包含完整的文件路径或使用相对路径来指定文件的位置。

组织工程技巧

  • 封装函数、编译参数等配置到.cmake文件中,总工程文件进行包含
  • include的时候,简化include(xxxx),然后设置CMAKE_MODULE_PATH环境变量
文章来源:https://blog.csdn.net/hiwoshixiaoyu/article/details/134842743
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。