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