23792Fermer23794
GodzilLe 26/03/2022 à 20:11
le '@' veux dire "target" (ou cible parceque le @ ressemble vaguement a une cible) et c'est la partie avant le ":"
'^' indique l'ensemble des fichiers qui sont a surveiller pour la cible cad ce qui est apres le ":"
'<' c'est le premier des fichiers qui est a surveiller. C'est utile par exemple si tu a des dépendances sur d'autres cibles mais qui ne sont pas des fichiers pour la compilation, genre des libraries



Tu peux remplacer $(^) par $(?) ca semble marcher, mais c'est un piège. "$(?)" est la liste de tous les fichiers qui on changé depuis la dernière compilation, et non l'ensemble des fichiers. C'est un bon piège qui m'a fait chier des années ou il compilais, mais le link foirais pvrcequ'il ne trouvais pas certains symboles, c'était juste parce qu'il ne lankais pas avec tous les .o car tous n'était pas régénéré.


La liste de toutes les variables automatiques de gnu Make (certaines ne sont probablement pas standard sur tous les make):

https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html



Mais je prefere de loin cmake en tout cas pour un projet de plus de 2-3 fichiers. Il a ses défauts (et certains sont assez chiants), mais au moins le fichier de configuration du projet est lisible, et il se débrouille généralement bien pour trouver des libs et/ou les mettre dans le bon ordre. C'est facile avec un Makefile ( ou a la main) de ne pas avoir les libs dans le bon ordre et la compile foire parce que ld est con.)