# Adding Generator Expressions # Generator expressions are evaluated during build system generation to produce information specific to each build configuration. Generator expressions are allowed in the context of many target properties, such as LINK_LIBRARIES, INCLUDE_DIRECTORIES, COMPILE_DEFINITIONS and others. They may also be used when using commands to populate those properties, such as target_link_libraries(), target_include_directories(), target_compile_definitions() and others. Generator expressions may to used to enable conditional linking, conditional definitions used when compiling, and conditional include directories and more. The conditions may be based on the build configuration, target properties, platform information or any other queryable information. There are different types of generator expressions including Logical, Informational, and Output expressions. Logical expressions are used to create conditional output. The basic expressions are the 0 and 1 expressions. A "$<0:...>" results in the empty string, and "$<1:...>" results in the content of "...". They can also be nested. For example: if(HAVE_LOG AND HAVE_EXP) target_compile_definitions(SqrtLibrary PRIVATE "HAVE_LOG" "HAVE_EXP") endif() Can be rewritten with generator expressions: target_compile_definitions(SqrtLibrary PRIVATE "$<$:HAVE_LOG>" "$<$:HAVE_EXP>" ) Note that "${HAVE_LOG}" is evaluated at CMake configure time while "$<$:HAVE_LOG>" is evaluated at build system generation time.