Spec-Zone.ru › CMake

function

Начинает запись функции для последующего вызова в качестве команды.

function(<name> [<arg1> ...])
  <commands>
endfunction()

Определяет функцию с именем <name>, принимающую аргументы с именами <arg1>, ... <commands> в определении функции записываются; они не выполняются до вызова функции.

По историческим причинам команда endfunction() допускает необязательный аргумент <name>. Если он используется, это должно быть точное повторение аргумента открывающей команды function.

Функция открывает новую область видимости: подробности см. в описании команды set(var PARENT_SCOPE).

Поведение политик внутри функций описано в документации команды cmake_policy().

Различия между функциями CMake и макросами описаны в документации команды macro().

Вызов

Вызов функции не зависит от регистра. Функцию, определённую как

function(foo)
  <commands>
endfunction()

можно вызвать любым из следующих способов:

foo()
Foo()
FOO()
cmake_language(CALL foo)

и так далее. Однако настоятельно рекомендуется придерживаться регистра, выбранного в определении функции. Обычно имена функций записываются строчными буквами.

Добавлено в версии 3.18: Для вызова функции также можно использовать команду cmake_language(CALL ...).

Аргументы

При вызове функции записанные <commands> сначала изменяются: формальные параметры (${arg1}, ...) заменяются переданными аргументами, после чего выполняются как обычные команды.

Помимо обращения к формальным параметрам, можно использовать переменную ARGC, значение которой будет равно количеству аргументов, переданных функции, а также ARGV0, ARGV1, ARGV2, ... — им будут присвоены фактические значения переданных аргументов. Это позволяет создавать функции с необязательными аргументами.

Кроме того, ARGV содержит список всех аргументов, переданных функции, а ARGN содержит список аргументов, следующих за последним ожидаемым аргументом. Обращение к аргументам ARGV# за пределами ARGC приводит к неопределённому поведению. Проверка того, что ARGC больше #, — единственный способ убедиться, что ARGV# был передан функции как дополнительный аргумент.

См. также

  • cmake_parse_arguments()
  • endfunction()
  • return()

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/function.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API