Cmake 之 自定义模块(Module)

1. 为什么要自定义模块

项目一般从CMakeLists.txt开始编写,但是随着时间的推移,CMakeLists.txt文件会变的越来越大,这个时候我们就需要将CMakeLists.txt文件拆开分写成几个小的模块,这样做的好处是:

1.主文件CMakeLists.txt易读性强

2.CMake 模块能够在其它项目中重复使用

3.和CMake的函数相比,模块能够帮助我们限制变量的作用域

这一节我们将通过定义并包含一个宏来展示如何编写并使用CMake的模块(Module)

2. 如何自定义模块

2.1 准备文件

本例中我们将使用两个文件:

CMakeLists.txt 和 cmake/colors.cmake
├──    cmake
│            └──    colors.cmake
└──    CMakeLists.txt

cmake/colors.cmake包含的内容如下:

  1. macro(define_colors)

  2. if(WIN32)

  3. # has no effect on WIN32

  4. set(ColourReset "")

  5. set(ColourBold "")

  6. set(Red "")

  7. set(Green "")

  8. set(Yellow "")

  9. set(Blue "")

  10. set(Magenta "")

  11. set(Cyan "")

  12. set(White "")

  13. set(BoldRed "")

  14. set(BoldGreen "")

  15. set(BoldYellow "")

  16. set(BoldBlue "")

  17. set(BoldMagenta "")

  18. set(BoldCyan "")

  19. set(BoldWhite "")

  20. else()

  21. string(ASCII 27 Esc)

  22. set(ColourReset "${Esc}[m")

  23. set(ColourBold "${Esc}[1m")

  24. set(Red "${Esc}[31m")

  25. set(Green "${Esc}[32m")

  26. set(Yellow "${Esc}[33m")

  27. set(Blue "${Esc}[34m")

  28. set(Magenta "${Esc}[35m")

  29. set(Cyan "${Esc}[36m")

  30. set(White "${Esc}[37m")

  31. set(BoldRed "${Esc}[1;31m")

  32. set(BoldGreen "${Esc}[1;32m")

  33. set(BoldYellow "${Esc}[1;33m")

  34. set(BoldBlue "${Esc}[1;34m")

  35. set(BoldMagenta "${Esc}[1;35m")

  36. set(BoldCyan "${Esc}[1;36m")

  37. set(BoldWhite "${Esc}[1;37m")

  38. endif()

  39. endmacro()

2.2 编写CMakeLists.txt

 
  1. cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

  2.  
  3. project(recipe-02 LANGUAGES NONE)

  4.  
  5. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

  6.  
  7. include(colors)

  8. define_colors()

  9.  
  10. message(STATUS "This is a normal message")

  11. message(STATUS "${Red}This is a red${ColourReset}")

  12. message(STATUS "${BoldRed}This is a bold red${ColourReset}")

  13. message(STATUS "${Green}This is a green${ColourReset}")

  14. message(STATUS "${BoldMagenta}This is bold${ColourReset}")

1. 本例并没有源代码需要编译,所以不需要CMake对任何编程语言进行支持,所以

project(recipe-02 LANGUAGES NONE)

2. 我们定义了一个宏define_colors,并放在了cmake/colors.cmake中,之所以要定义宏而不是函数,是因为我们希望在调用宏之后还继续使用宏内部的变量值。

3. 定义好模块之后,我们要告诉CMake到哪里可以找到宏定义:

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

然后就是包含并调用宏,include(colors)会告诉CMake在CMAKE_MODULE_PATH路径中寻找colors.cmake的文件。

4. 当然,我们也可以使用下面的语句来实现以上的功能

 
  1. include(cmake/colors.cmake)

  2. define_colors()

涨知识:CMake 中 function 和 macro的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
### 回答1: CMAKE_MODULE_PATH是一个CMake变量,用于指定查找CMake模块文件的路径。模块文件通常包含定义函数和宏的CMake代码,可以在CMakeLists.txt文件中使用include()命令进行引用。 默认情况下,CMake会在以下几个位置搜索模块文件: - CMake安装目录下的share/cmake-x.y/Modules目录 - 系统wide搜索路径中指定的目录 如果需要在其他位置搜索模块文件,可以使用set命令修改CMAKE_MODULE_PATH变量,例如: ``` set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "/path/to/my/modules") ``` 这会将CMAKE_MODULE_PATH添加到/path/to/my/modules目录,使CMake在这个目录中搜索模块文件。 ### 回答2: CMAKE_MODULE_PATH是一个CMake变量,用于指定CMake在搜索模块文件时的路径。模块文件通常是一些用于扩展CMake功能的脚本或配置文件。 CMake是一个用于构建、测试和打包软件的跨平台工具。在构建过程中,CMake需要查找和加载各种模块文件来提供特定功能或库的支持。CMAKE_MODULE_PATH变量允许开发人员自定义CMake搜索模块文件的路径。 通常情况下,CMake会在默认路径下搜索模块文件,如CMake安装目录的Modules子目录。但有时候,开发人员可能需要将自定义模块文件放置在其他地方,这时就可以使用CMAKE_MODULE_PATH来指定其他路径。 使用CMAKE_MODULE_PATH很简单,只需在CMakeLists.txt文件中设置该变量即可。例如,可以通过以下方式添加一个新的搜索路径: set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "/path/to/my_module_directory") 在上述代码中,将"/path/to/my_module_directory"添加到了CMAKE_MODULE_PATH中,以便CMake构建过程中也搜索这个路径下的模块文件。 通过设置CMAKE_MODULE_PATH变量,开发人员可以方便地引入自定义模块文件,从而扩展CMake的功能,使其能够更好地适应项目的需求。 ### 回答3: CMAKE_MODULE_PATH是一个CMake项目中的一个变量,用于指定CMake在查找和加载模块文件时的搜索路径。模块文件通常是由CMake提供的一些辅助函数和宏的集合,用于扩展CMake的功能。 CMake构建项目时,会通过CMAKE_MODULE_PATH变量来确定要搜索的路径。默认情况下,CMake会在系统的一些默认路径下寻找模块文件,如/usr/share/cmake/Modules和/usr/local/share/cmake/Modules等。在这些默认路径下,可以找到CMake提供的一些常用模块文件。 然而,有时候我们需要自定义模块文件或者扩展一些功能,此时可以通过设置CMAKE_MODULE_PATH变量来指定额外的路径。可以使用set命令来设置CMAKE_MODULE_PATH,例如set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)。这样,CMake将会在指定的路径下查找并加载模块文件。 通过设置CMAKE_MODULE_PATH,我们可以将自定义模块文件放置在项目的特定目录中,并告诉CMake构建过程中到该目录中查找模块文件。这样,我们可以自定义CMake的功能,即使CMake本身没有提供相应的支持,也可以通过编写自己的模块文件来扩展CMake的功能。 总之,CMAKE_MODULE_PATH是一个用于指定CMake在查找和加载模块文件时搜索路径的变量。通过设置CMAKE_MODULE_PATH,我们可以自定义CMake的功能,扩展其功能和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值