Обходной путь - использовать промежуточную ссылку на переменную в качестве escape.Только самая внутренняя подстановка является макроподстановкой, таким образом, ${${}ARGV0}
заменяется макросом на ${${}ARGV0}
, тогда подстановка первой переменной дает ${ARGV0}
, а подстановка второй переменной дает значение первого аргумента в самой внутренней области функции, содержащей макрос.
Таким образом:
macro (show_arg1)
message("1:${${}ARGV1}")
endmacro()
function (test_function)
show_arg1()
endfunction()
test_function(foo bar baz)
Вывод:
1:bar
Это позволяет реализовать макросы, которые ведут себя как cmake_parse_arguments
, но делают что-то еще, все еще анализируя аргументыокружающие функции.
Если подстановка переменной ${}
когда-либо вызовет ошибку, можно использовать любую неустановленную переменную, например.${${mgUXpKW8srYnwnSP}ARGV1}
.