ExternalProject is just a sequence of steps to perform. So you may use two instances of it:
- ExternalProject_Add() call to be built at main project's configuration stage. E.g., as described in that question:
other_project/CMakeLists.txt:
project(other_project)
include(ExternalProject)
ExternalProject_Add(<project_name> <options...>
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
)
- ExternalProject_Add() call to be built at main project's build stage.
CMakeLists.txt:
# The second external project will be built at *build stage*
ExternalProject_Add(<project_name> <options...>
CONFIGURE_COMMAND "" # Disable configure step. But other steps will be generated.
)
By using same <options> for both 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.