Официальный документ CMake 2.8.12 говорит о macro
Когда он вызывается, сначала выполняются команды, записанные в макросе измененный путем замены формальных параметров ($ {arg1}) на аргументы и затем вызывается как обычные команды.
и около function
Когда он вызывается, команды, записанные в функции, сначала измененный путем замены формальных параметров ($ {arg1}) на аргументы и затем вызывается как обычные команды.
Очевидно, что две цитаты почти одинаковы, но меня смущает. Вначале заменяет параметры при вызове функции точно так же, как макрос?