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# был передан функции как дополнительный аргумент.
См. также
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/function.html