小编ale*_*des的帖子

如何在cmake中定义宏内的函数

我一直在一个使用 cmake 的软件项目中工作,其中文件结构如下所示:

  • cmake
  • 测试
  • 建造
  • 源代码
    • 模块1
    • 模块2
    • 模块3
      • 子模块1
      • 子模块2
        • 暗示
          • 后端1
          • 后端2

每个文件夹都包含一个 CMakeLists.txt,这基本上会将更多文件添加到 src 文件夹中 CMakeLists.txt 中定义的源代码文件列表中。问题是,使用 PARENT_SCOPE 将所有这些变量沿着作用域堆栈传递是不切实际的,因此我们使用属性来实现这一点。

它运行良好,直到我们决定为了简化测试,将每个子模块构建在静态库上会很有用。所以我一直在使用一个如下所示的宏:

macro(define_build_unit unit_name unit_root)
  function(${unit_name}_add_sources)
    message(STATUS ${ARGN})
    file(RELATIVE_PATH _relPath ${unit_root} "${CMAKE_CURRENT_SOURCE_DIR}")
    foreach(_src ${ARGN})
      if(_relPath)
        list(APPEND ${unit_name}_SRCS "${_relPath}/${_src}")
      else()
        list(APPEND ${unit_name}_SRCS "${_src}")
      endif()
    endforeach()
    if(_relPath)
      set_property(GLOBAL APPEND PROPERTY ${unit_name}_SRCS ${${unit_name}_SRCS})
    endif()
  endfunction()

  function(${unit_name}_add_link_deps)
    foreach(_dep ${ARGN})
      list(APPEND ${unit_name}_DEPS "${_dep}")
    endforeach()
    set_property(GLOBAL APPEND PROPERTY ${unit_name}_DEPS ${${unit_name}_DEPS})
  endfunction()

  function(${unit_name}_add_include_dirs)
    foreach(_inc ${ARGN})
      list(APPEND ${unit_name}_INC_DIRS "${_inc}")
    endforeach()
    set_property(GLOBAL APPEND PROPERTY ${unit_name}_INC_DIRS ${${unit_name}_INC_DIRS})
  endfunction() …
Run Code Online (Sandbox Code Playgroud)

cmake

3
推荐指数
1
解决办法
2433
查看次数

标签 统计

cmake ×1