2017-08-29 86 views
2

我们追溯地向我们的代码库添加了构件块上层结构。这意味着新的命名空间规则(cpp)和新的文件夹结构。用于构建模块的Cmake(文件夹包含源代码)

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

我们的目标:即增加了块在功能像 方式我们构建

  1. 一个 “全球性” 的CMakeLists.txt文件。
  2. 每块构建工件(* .H,*的.cpp ...)应在子文件的CMakeLists.txt被定义里面每个新 块。

概述:

是:

+-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 

我们不想加块构建工件的信息为我们的全球列表文件(如添加aux_source_directory,include_directories)。原因是:这种方法有太多的块,我们想用不同的块来配置构建。

+0

我很抱歉,但我不确定要理解您的问题;你想为每个块有不同的构建配置?这意味着顶级'CMakeLists.txt'不能通过调用'add_subdirectory()'来驱动整个项目? – piwi

+0

是吗?这总结了我想要做的事情。或者我想念什么? – Thomas

+0

你真正的问题是什么?由于每个CMakeLists.txt都有自己的子范围,因此使用标准的现代CMake很容易实现。除了作为目标之外,这些街区不需要了解彼此的任何信息。尽可能使用'target_ *'命令。 – utopia

回答

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,其中每个目标将独立构建相应的项目。

相关问题