Необязательный аргумент в макросе 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 не проверяет количество параметров, необходимых для макроса.