zoukankan      html  css  js  c++  java
  • 11-cmake语法-函数和宏的定义

    cmake语法不仅仅可以适用于 CMakeLists.txt,也适用于 xxx.cmake 文档。

    在 OpenCV CMakeLists.txt 中,很多 ocv_XXX() 的函数,都是定义在相应的 xxx.cmake 中。

    比如:L116

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

      

    函数定义:

    function(函数名 参数名)
    
      ...
    
    endfunction()
    

     例子:cmake/OpenCVMinDepVersions.cmake中

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

      

    宏的定义:

    macro(宏名 参数)
      ...
    endmacro()

     例子:cmake/OpenCVMinDepVersions.cmake中

    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,需要传参出去,可以通过形参输入传出。

    macro(ocv_xxx return_hello_world)
      set(return_hello_world "Hello_World")
    endmacro()
    

      

    参考:

    https://www.jianshu.com/p/44ba033c262a

  • 相关阅读:
    一种复杂的情感--“外戚”
    追~
    神受的孩子
    不好的习惯
    思杨改编的朝代歌
    siyang入厕
    小思趣事
    今天周三啦~~时光啊
    Python(6)——装饰器
    Python(5)——关于描述符的三种操作方法
  • 原文地址:https://www.cnblogs.com/alexYuin/p/8877253.html
Copyright © 2011-2022 走看看