La fonction vs Macro dans CMake

Le document officiel de CMake 2.8.12 dit à propos de macro

Lorsqu'elle est invoquée, les commandes enregistrées dans la macro sont d'abord
modifié en remplaçant les paramètres formels (${arg1}) avec les arguments
passé et puis invoquée comme normal commandes.

et sur function

Lorsqu'elle est invoquée, les commandes enregistrées dans la fonction sont d'abord
modifié en remplaçant les paramètres formels (${arg1}) avec les arguments
passé et puis invoquée comme normal commandes.

Évidemment, les deux citations sont presque la même, mais me confondre. Ne remplacer les paramètres d'abord, lorsque l'appel d'une fonction comme macro?

  • Il y a au moins un autre important, quoique de façon assez évidente différence entre function et macro: la sémantique de return(): Lorsqu'il est utilisé dans un macro, vous n'aurez pas de retour à partir de la macro, mais à partir de la fonction appelante.
  • Une autre remarque importante, c'est qu'une macro ont deux passes phase d'expansion sur des arguments lorsqu'une fonction est un seul. Essayez de créer ces macro et de la fonction, et l'impression de l' ${ARGV} de l'intérieur: macro(my_macro), function(my_func). Et de les utiliser: set(a 123), my_macro("\\\${a}\\\\;\\\;;") , my_func(\${a}\\;\;;). Vous trouverez que vous avez à double échapper à toutes les $, \ , ; pour bien passer toute la chaîne inchangé pour les commandes imbriquées. Ce qui est réel dans le cmake 3.14+.
InformationsquelleAutor Yantao Xie | 2014-06-19