Из документации для cmake_parse_arguments
:
cmake_parse_arguments
рассмотрим для каждого из ключевых слов, перечисленных в <options>
, <one_value_keywords>
и <multi_value_keywords>
aпеременная, состоящая из заданного <prefix>
, за которым следует "_"
и имени соответствующего ключевого слова.
Например, одна из переменных, заполняемых после запуска этого метода, - <prefix>_UNPARSED_ARGUMENTS
.Поскольку ваш префикс уже содержит символ подчеркивания, он расширяется до ARG__UNPARSED_ARGUMENTS
(с двумя символами подчеркивания после ARG
).Таким образом, добавление дополнительного подчеркивания к вашим message()
вызовам дает проанализированные значения:
include(CMakeParseArguments)
set(prefix PREFIX_)
set(${prefix}VAR "foo")
message(DEBUG " value of " "${prefix}VAR" " is " ${${prefix}VAR})
function(func)
set(prefix ARG_)
set(options OPTION)
set(oneValueArgs VALUE)
set(multiValueArgs MULTIVALUE)
cmake_parse_arguments(PARSE_ARGV 0 "${prefix}" "${options}" "${oneValueArgs}" "${multiValueArgs}")
# Add additional underscore to the variables expanded here!
message(DEBUG ${${prefix}_UNPARSED_ARGUMENTS})
message(DEBUG ${${prefix}_OPTION})
message(DEBUG ${${prefix}_VALUE})
message(DEBUG ${${prefix}_MULTIVALUE})
endfunction(func)
func(VALUE 42 MULTIVALUE "foo" "bar" "baz")
Это печатает следующее:
DEBUG value of PREFIX_VAR is foo
DEBUG
DEBUG FALSE
DEBUG 42
DEBUG foobarbaz