gmake compiler tous les fichiers dans un répertoire
nous avons certains de code C++ que nous avons besoin de créer un fichier dans. Chaque .h et .C paire de créer un objet, puis certains objets sont reliés ensemble pour former un exécutable. Les choses assez standard.
Cette non-gnu make commande crée tous les fichiers en un objet dans un répertoire
%.o:%.C
$(CC) $(CPFLAGS) -c $<
Ce que ce n'est que pour chaque %.C fichier (c'est à dire tous les .Fichier C) construire un correspondant .o fichier.
Quelqu'un sait comment faire cela avec gmake?
Acclamations
Marque
OriginalL'auteur Mark Lakewood | 2009-08-28
Vous devez vous connecter pour publier un commentaire.
La syntaxe que vous avez montré est appelé un modèle de règle dans GNU make langage, et il constitue la pierre angulaire de votre solution. Tous vous avez besoin est d'ajouter un moyen d'obtenir la liste des .C dynamiquement des fichiers. D'autres ont montré des solutions qui utilisent
$(shell)
pour ce faire, mais c'est inutilement inefficace. Je vous suggère plutôt d'utiliser $(wildcard), qui est un GNU make fonction intégrée conçu pour ce but:Si vous êtes à la recherche de quelque chose de plus concis, le suivant sera trop de travail:
Ce seulement élimine les variables et tire parti du fait que GNU make fournit une valeur par défaut
%.o: %.C
modèle de règle, ainsi que d'une règle par défaut pour la liaison d'un exécutable ensemble à partir d'un ensemble d'objets. Personnellement, je utiliser la version plus détaillée que je trouve plus facile à lire et à maintenir, mais à chacun son propre.Espère que ça aide,
Eric Melski
OriginalL'auteur Eric Melski
C'est un exemple de règle de motif, il devrait fonctionner correctement dans
gmake
. Pour de très simple construit comme cela, vous pouvez reposent principalement sur l' les règles implicites. La principale chose que vous devez spécifier dans la cible que vous souhaitez construire et de ses dépendances:Notez l'utilisation de simplement élargi variable opérateur d'affectation (
:=
) plutôt que le récursive opérateur d'affectation (=
), ce qui peut réduire la quantité de retraitement de faire ne plus compliqué construit.Correct sur le modèle statique de la règle, bien sûr. Fixe. J'utilise $(shell ) d'un lot en dépit de la fourche, car j'ai souvent généraliser la commande. À l'aide de: affectation= je souffre il extra qu'une fois.
vous pouvez tout aussi bien utiliser : = $(wildcard) si vous le souhaitez.
OriginalL'auteur dmckee