CMAKE

External Projects

Overview

An external project in a CMake system is a separate, self-contained CMake project that can be turned into a target, which can then be used as a dependency on other targets in your build system.

The ExternalProject module runs it’s commands at build time.

An external project can be added with the command ExternalProject_Add().

CMAKE_ARGS can be used to provide command-line style arguments to the CMakeLists.txt file in this external project.

You can use this to “pass-in parameters” to the called CMakeLists.txt file by using the -D option to create a cache entry.

ExternalProject_Add(
...
CMAKE_ARGS -DMY_VARIABLE=1
...
)

Add CMake-enabled projects to an existing CMake-enabled project can become quite a complex task. The article at https://coderwall.com/p/y3zzbq/use-cmake-enabled-libraries-in-your-cmake-project details an elegant solution.

It can be confusing when you want to add-in a CMake-managed project into your current project, which is also CMake-managed. There are a few ways of doing so, one being ExternalProject_Add() and the other add_subdirectory(). After-all, add_subdirectory() doesn’t have to actually be a subdirectory (it can be any directory on the system).
ExternalProject_Add() is much more powerful than add_subdirectory().