cmake_language

Call meta-operations on CMake commands.

Synopsis

cmake_language(CALL <command> [<args>...])
cmake_language(EVAL CODE <code>...)

Introduction

This command will call meta-operations on built-in CMake commands or those created via the macro() or function() commands.

cmake_language does not introduce a new variable or policy scope.

Calling Commands

cmake_language(CALL <command> [<args>...])

Calls the named <command> with the given arguments (if any). For example, the code:

set(message_command "message")
cmake_language(CALL ${message_command} STATUS "Hello World!")

is equivalent to

message(STATUS "Hello World!")

Note

To ensure consistency of the code, the following commands are not allowed:

  • if / elseif / else / endif

  • while / endwhile

  • foreach / endforeach

  • function / endfunction

  • macro / endmacro

Evaluating Code

cmake_language(EVAL CODE <code>...)

Evaluates the <code>... as CMake code.

For example, the code:

set(A TRUE)
set(B TRUE)
set(C TRUE)
set(condition "(A AND B) OR C")

cmake_language(EVAL CODE "
  if (${condition})
    message(STATUS TRUE)
  else()
    message(STATUS FALSE)
  endif()"
)

is equivalent to

set(A TRUE)
set(B TRUE)
set(C TRUE)
set(condition "(A AND B) OR C")

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/eval.cmake "
  if (${condition})
    message(STATUS TRUE)
  else()
    message(STATUS FALSE)
  endif()"
)

include(${CMAKE_CURRENT_BINARY_DIR}/eval.cmake)