cmake语法-函数和宏的定义
cmake语法不仅仅可以适用于 CMakeLists.txt,也适用于 xxx.cmake 文档。
在 OpenCV 的 CMakeLists.txt 中,很多 ocv_XXX() 的函数,都是定义在相应的 xxx.cmake 中。
比如:L116
1
2
3
4
5
6
7
8
9
10
|
include(cmake /OpenCVUtils .cmake) # must go before the project command # @ 解说: # @ ocv_update 函数定义在 cmake/OpenCVUtils.cmake 这个组件中,可以用Notepad++打开看看。 ocv_update(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE) if (DEFINED CMAKE_BUILD_TYPE) set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} ) endif() |
函数定义:
1
2
3
4
5
|
function (函数名 参数名) ... endfunction() |
例子:cmake/OpenCVMinDepVersions.cmake中
1
2
3
4
5
6
7
8
9
|
function (ocv_cmake_eval var_name) if (DEFINED ${var_name}) file (WRITE "${CMAKE_BINARY_DIR}/CMakeCommand-${var_name}.cmake" ${${var_name}}) include( "${CMAKE_BINARY_DIR}/CMakeCommand-${var_name}.cmake" ) endif() if ( ";${ARGN};" MATCHES ";ONCE;" ) unset (${var_name} CACHE) endif() endfunction() |
宏的定义:
1
2
3
|
macro(宏名 参数) ... endmacro() |
例子:cmake/OpenCVMinDepVersions.cmake中
1
2
3
4
|
macro(ocv_cmake_configure file_name var_name) configure_file(${file_name} "${CMAKE_BINARY_DIR}/CMakeConfig-${var_name}.cmake" ${ARGN}) file (READ "${CMAKE_BINARY_DIR}/CMakeConfig-${var_name}.cmake" ${var_name}) endmacro() |
函数和宏不支持return,需要传参出去,可以通过形参输入传出。
1
2
3
|
macro(ocv_xxx return_hello_world) set (return_hello_world "Hello_World" ) endmacro() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2013-09-13 sql 语言
2013-09-13 sqllite3
2013-09-13 输入法核心数据结构及算法的设计