Необязательный аргумент в макросе cmake
Я хочу создать макрос, аргумент которого является необязательным. Если не указан, значение аргумента должно быть пустой строкой. Как я могу это сделать?
Ответы
Ответ 1
CMake (AFAIK) не проверяет количество переменных, переданных макросу, поэтому вы можете просто объявить его как любой другой макрос.
Существует также переменная ${ARGN}
, которая расширяется до списка всех "оставшихся" переменных, передаваемых макросу, что может быть полезно.
Обновление
Как указано в Sam comment, CMake теперь терпит неудачу, если не будут указаны все ожидаемые (именованные) аргументы при вызове макроса или функции.
Ответ 2
Для вызывающих абонентов требуются любые аргументы, указанные в определении макроса. Тем не менее, ваш макрос все еще может принимать необязательные аргументы, если они явно не указаны в определении макроса.
То есть, вызывающим абонентам разрешено передавать аргументы дополнительные (которые не были указаны в списке аргументов макроса). Ваш макрос может проверить наличие таких дополнительных аргументов, проверив переменную ${ARGN}
.
Остерегайтесь: ARGN
не является "нормальной" переменной cmake. Чтобы использовать его с помощью команды list()
, сначала необходимо скопировать ее в обычную переменную:
macro (mymacro required_arg1 required_arg2)
# Cannot use ARGN directly with list() command,
# so copy it to a variable first.
set (extra_macro_args ${ARGN})
# Did we get any optional args?
list(LENGTH extra_macro_args num_extra_args)
if (${num_extra_args} GREATER 0)
list(GET extra_macro_args 0 optional_arg)
message ("Got an optional arg: ${optional_arg}")
endif ()
endmacro (mymacro)
Ответ 3
Это происходит по умолчанию, если аргумент не указан, поскольку CMake не проверяет количество параметров, необходимых для макроса.