Как использовать другой блок в качестве шага сборки?

Когда я делаю «bii cpp: build», я хочу, чтобы bii сначала собрал блок B, а затем он должен вызвать двоичный файл, созданный блоком B, с некоторыми параметрами, а когда двоичный файл завершится, bii должен перейти к сборке блока A. I Я не хочу, чтобы блок A #include что-либо из блока B. По сути, я хочу использовать выходные данные блока B в cmake add_custom_command во время процесса сборки блока A. Как этого достичь?

2

Решение

На данный момент «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 / сборки папку, создайте новый пустой и выполните (моя ОС — 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

Затем удалите и создайте его снова и создайте следующий блок A:

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

Я надеюсь, что это поможет вам! 😉

0

Другие решения


По вопросам рекламы [email protected]