La réponse d'Eric est bonne, si vous cherchez à suivre l'heure pour une cible. Bien qu'il n'y ait aucune raison de définir une variable séparée; il est plus simple de faire écho à la sortie de la commande. Aussi, si vous utilisez backquotes old school à la place du nouveau format $(...)
pour commandes shell, il peut être plus facile à lire dans une recette de makefile:
test:
echo [email protected]: `date +%s` > test.log
@sleep 2
echo [email protected]: `date +%s` >> test.log
La raison pour laquelle votre tentative ne fonctionne pas est que faire évaluera tous lignes de la recette avant de commencer la première ligne. Ainsi, toutes les variables de make et les fonctions comme eval
, shell
, etc. dans la recette entière sont toutes développées en avant, avant que n'importe quelle partie de la recette commence. Ainsi, les résultats de l'exécution de la commande date
plusieurs fois seront toujours identiques.
Si vous essayez de chronométrer toutes vos commandes et que vous ne voulez pas modifier toutes les recettes pour conserver un journal, une autre option consiste à écrire un script ou un programme spécial qui prendra une ligne de commande en argument, puis exécutez cette commande dans un shell avec un timing. Ensuite, définissez la variable make SHELL
pour utiliser ce script/programme au lieu du shell réel. Le faire fonctionner correctement sera un peu compliqué, si vous avez des recettes complexes (vous devez conserver toutes les citations, etc.). Il est plus facile d'écrire un petit programme C et d'utiliser fork/exec: pas de problème de citation. Mais, c'est la manière la plus fiable et la moins invasive de le faire.