构建块的Cmake(文件夹包括源代码)

时间:2017-08-29 07:18:34

标签: c++ architecture cmake directory

我们正在追溯性地将构建块上层结构添加到我们的代码库中。这意味着新的命名空间规则(cpp)和新的文件夹结构。

我的问题涉及到我们的make文件环境(Cmake)的变化以及我们应该如何处理这种变化(我们完全混淆了)。

我们的目标:

  1. one" global" CMakeLists.txt文件,用于在功能中添加块 方式到我们的构建。
  2. 每个块构建工件(* .h,* .cpp ...)应该在子CMakeLists.txt文件中定义里面每个新的 块。
  3. 概述:

    时:

      +-src
      +--block1.cpp
      +--block1_1.cpp
      +--block(n+1).cpp
      +--CMakeLists.txt  <- old global make file
      +-include
      +--block1.h
      +--block1_1.h
      +--block(n+1).h
    

    应:

      - Block 1
      +- src
      +-- block1.cpp
      +-- block1_1.cpp
      +- inlcude
      +-- block1.h
      +-- block1_1.h
      **+- CMakeLists.txt** <- sub list file that handles target req. of Block 1
      + Block 2
      +- ... (same structure as 1)
      + Block 3
      +- ... (same structure as 1)
      +-CMakeLists.txt <- global list file that adds Blocks to target
    

    我们不希望将块构建工件信息添加到我们的全局列表文件中(例如add aux_source_directory,include_directories)。原因:此方法有太多块,我们希望使用不同的块配置构建。

1 个答案:

答案 0 :(得分:0)

您可以使用CMake模块ExternalProject来驱动彼此独立的项目的编译。您可以拥有一个顶级CMakeLists.txt,其中包含例如:

include(ExternalProject)

externalproject_add(block1 URL ${CMAKE_CURRENT_SOURCE_DIR}/block1)
externalproject_add(block2 URL ${CMAKE_CURRENT_SOURCE_DIR}/block2)

然后,您创建一个使用此顶级CMakeLists.txt配置的构建目录;它将有两个目标block1block2,其中每个目标将独立构建相应的项目。