2017-08-29 3 views
2

私たちはコードブロックにビルディングブロックスーパーストラクチャーを遡及的に追加しています。これは新しい名前空間ルール(cpp)と新しいフォルダ構造を意味します。ビルディングブロック用のCmake(ソースのフォルダインクルード)

私の質問は私たちのmakeファイル環境(Cmake)の変更とこの変更にどのように取り組むべきか(私たちは完全に混乱しています)に関係しています。

私たちの目標:私たちのビルドに 道よう機能でブロックを追加します

  1. 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_directoryなど)。理由:このアプローチではブロックが非常に多く、ブロックであり、異なるブロックでビルドを構成する必要があります。

+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の2つのターゲットがあり、それぞれのターゲットはそれぞれ独立して対応するプロジェクトを構築します。

関連する問題