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

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM