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

  • 相关阅读:
    最全 C 语言常用算法详解-排序-队列-堆栈-链表-递归-树 (面试有用)
    iOS多线程各种安全锁介绍
    将openfire部署到CentOS云服务器上
    触摸事件MultiTouch Events
    Usaco 2006Nov Round Numbers
    Codeforces 850C Arpa and a game with Mojtaba
    HDU4466 Triangle
    Codeforces Gym 101521A Shuttle Bus
    Codeforces 817F MEX Queries
    Codeforces 482B Interesting Array
  • 原文地址:https://www.cnblogs.com/alexYuin/p/8877253.html
Copyright © 2011-2022 走看看