function
Начать запись функции для последующего вызова в качестве команды.
function(<name> [<arg1> ...]) <commands> endfunction()
Определяет функцию с именем <name>, которая принимает аргументы с именами <arg1>, … <commands> в определении функции записываются; они не выполняются до тех пор, пока функция не вызвана.
По унаследованному соглашению, команда endfunction() допускает необязательный <name> аргумент. Если он используется, он должен быть точной копией аргумента открывающей команды function.
Функция открывает новую область видимости: см. set(var PARENT_SCOPE) для подробностей.
См. документацию команды cmake_policy() для поведения политик внутри функций.
См. документацию команды macro() для отличий между функциями CMake и макросами.
Вызов
Вызов функции нечувствителен к регистру. Функция, определенная как
function(foo) <commands> endfunction()
может быть вызвана любым из
foo() Foo() FOO()
и так далее. Тем не менее, настоятельно рекомендуется придерживаться регистра, выбранного при определении функции. Обычно имена функций используют строчные буквы.
Аргументы
При вызове функции записанные <commands> сначала изменяются путем замены формальных параметров (${arg1}, …) переданными аргументами, а затем вызываются как обычные команды.
В дополнение к обращению к формальным параметрам, можно обратиться к переменной ARGC, которая будет установлена в количество переданных аргументов, а также к ARGV0, ARGV1, ARGV2, …, которые будут содержать фактические значения переданных аргументов. Это позволяет создавать функции с необязательными аргументами.
Кроме того, ARGV содержит список всех переданных аргументов, а ARGN — список аргументов после последнего ожидаемого аргумента. Обращение к аргументам ARGV# за пределами ARGC приводит к неопределенному поведению. Проверка того, что ARGC больше #, — единственный способ гарантировать, что ARGV# был передан в качестве дополнительного аргумента.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/command/function.html