2

When I do a "bii cpp:build", I want bii to first build block B, and then it must call the binary produced by block B with some parameters, and when the binary completes, bii should proceed to build block A. I don't want block A to #include anything from block B. Essentially I want to use the output of block B in a cmake add_custom_command during the build process of block A. How can this be achieved?

4

1 に答える 1

0

現時点では、「bii」はプロジェクト内のすべてのブロックを同時にコンパイルすることしかできませんが、変更されたルート CMakeLists.txt を手動で実行するというトリックを使用できます。

プロジェクトのレイアウトは次のようになっていると思います。

your_project
|- bii
|- blocks
|- build
|- cmake
|    |- CMakeLists.txt  # root CMakeLists.txt
|- deps

次に、その CMakeLists.txt を変更する必要があります。

元のコード

PROJECT( my_project )
cmake_minimum_required(VERSION 3.0)

# inclusion of general biicode macros, biicode.cmake 
set(CMAKE_MODULE_PATH "${CMAKE_HOME_DIRECTORY}/cmake"
                      "${CMAKE_HOME_DIRECTORY}/../blocks"
                      "${CMAKE_HOME_DIRECTORY}/../deps")
INCLUDE(biicode.cmake) 

ADD_DEFINITIONS(-DBIICODE)
SET(BIICODE_ENV_DIR C:/Users/Usuario/.biicode)

#artifact to allow upstream configurations
BII_PREBUILD_STEP(blocks/fenix/blockA)
BII_PREBUILD_STEP(blocks/fenix/blockB)

enable_testing()
# Inclusion of the blocks affected by the build
BII_INCLUDE_BLOCK(blocks/fenix/blockA)
BII_INCLUDE_BLOCK(blocks/fenix/blockB)

これを次のものに置き換えます。

新しいコード

PROJECT( my_project )
cmake_minimum_required(VERSION 3.0)

# inclusion of general biicode macros, biicode.cmake 
set(CMAKE_MODULE_PATH "${CMAKE_HOME_DIRECTORY}/cmake"
                      "${CMAKE_HOME_DIRECTORY}/../blocks"
                      "${CMAKE_HOME_DIRECTORY}/../deps")
INCLUDE(biicode.cmake) 

ADD_DEFINITIONS(-DBIICODE)
SET(BIICODE_ENV_DIR C:/Users/Usuario/.biicode)

enable_testing()

IF(BUILD_BLOCK_A)
    BII_PREBUILD_STEP(blocks/fenix/blockA)
    BII_INCLUDE_BLOCK(blocks/fenix/blockA)
ELSEIF(BUILD_BLOCK_B)
    BII_PREBUILD_STEP(blocks/fenix/blockB)
    BII_INCLUDE_BLOCK(blocks/fenix/blockB)
ENDIF()

したがって、your_project/buildフォルダーを削除し、新しい空のフォルダーを作成して実行します (私の OS は Windows で、「MinGW Makefiles」ジェネレーターを使用しています)。

your_project$ cd build
your_project/build$ cmake -G "MinGW Makefiles" -DBUILD_BLOCK_B=1 ../cmake
your_project/build$ cmake --build .
your_project/build$ ../bin/your_blockB_executable -your_additional_flags

次に、それを削除して再度作成し、次の blockA をビルドします。

your_project/build$ cmake -G "MinGW Makefiles" -DBUILD_BLOCK_A=1 ../cmake
your_project/build$ cmake --build .
your_project/build$ ../bin/your_blockA_executable

お役に立てば幸いです。;)

于 2015-01-18T17:11:24.820 に答える