2017-08-29 117 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,其中每個目標將獨立構建相應的項目。

相關問題