Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to configure ExternalProject during main project configuration?

Tags:

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 the build time.

I would like to perform the configuration step of an external project during configuration of the main project. When the external project configuration is done the description of imported targets are available so the external project can be loaded with find_package() function.

Is it possible to build some targets at configuration time?

like image 916
Paweł Bylica Avatar asked Jun 15 '16 20:06

Paweł Bylica


1 Answers

ExternalProject is just a sequence of steps to perform. So you may use two instances of it:

  1. 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
)
  1. 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.

like image 133
Tsyvarev Avatar answered Sep 26 '22 12:09

Tsyvarev