The CMake\'s ExternalProject allows to define how to an external project is going to be downloaded, configured, built and installed. All whose steps are going to be performed at
ExternalProject is just a sequence of steps to perform. So you may use two instances of it:
other_project/CMakeLists.txt:
project(other_project)
include(ExternalProject)
ExternalProject_Add(
BUILD_COMMAND "" # Disable build step.
INSTALL_COMMAND "" # Disable install step too.
)
CMakeLists.txt:
# The first external project will be built at *configure stage*
execute_process(
COMMAND ${CMAKE_COMMAND} --build . ${CMAKE_SOURCE_DIR}/other_project
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/other_project
)
CMakeLists.txt:
# The second external project will be built at *build stage*
ExternalProject_Add(
CONFIGURE_COMMAND "" # Disable configure step. But other steps will be generated.
)
By using same ExternalProject_Add()
calls we achieve "preemption" of both external projects created: build and follow steps of the second project will use result of configure step of the first one.