What does "$<$<CONFIG:Debug>:Release>" mean in cmake?

That's a CMake generator expression. You can follow the link for a full discussion of what these are and what they can do. In short, it's a piece of text which CMake will evaluate at generate time (when it's done parsing all CMakeLists and is generating the buildsystem); it can evaluate to a different value for each configuration.

The one you have there means roughly this (pseudo-code):

if current_configuration == "Debug"
  output "Release"
if current_configuration == "Release"
  output "Debug"

So, if the current configuration is Debug, the whole expression will evaluate to Release. If the current configuration's Release, it will evaluate to Debug. Notice that the step being added is called "BuildOtherConfig," so this inverted logic makes sense.


How it works, in a little more detail:

$<CONFIG:Debug>

This will evaluate to a 1 if the current config is Debug, and to a 0 otherwise.

$<1:X>

Evaluates to X.

$<0:X>

Evaluates to an empty string (no value).

Putting it together, we have $<$<CONFIG:Debug>:Release>. When the current config is Debug, it evaluates like this:

$<$<CONFIG:Debug>:Release>
$<1:Release>
Release

When the current config is not Debug, it evaluates like this:

$<$<CONFIG:Debug>:Release>
$<0:Release>

Tags:

Cmake