Notre fichier compilera .C Fichiers source avec une règle de modèle statique comme ceci: Je dois modifier l'un des fichiers .c en un fichier objectif-c .m. Invoquant le compilateur est le même pour les deux types de source, de sorte que j'aimerais utiliser la même règle et simplement la modifier pour être plus flexible. Je préférerais ne pas changer la variable d'options car elle est également utilisée pour l'étape de liaison, etc. p> est un moyen de rendre la règle ci-dessus plus flexible pour accueillir des fichiers .C et .m? p> merci p> p>
3 Réponses :
ne pas vraiment copier simplement sur
Cela donnera des erreurs. Pour la première instance, aucun %. M code> Les fichiers seront trouvés (erreur!), Et pour le second - non
%. C code> (une autre erreur!)
Désolé fait seulement regarde ce qui est là s'il n'y a pas de fichier .C, il n'appellera pas la règle% .c
L'appel au même compilateur est juste une occasion heureuse. Normalement, vous ne compilez pas de code Objective-C avec Mais puisque vous allez de manière difficile, je ne posterai pas une solution à droite, où vous séparez les objectifs de l'objectif-C d'objectifs de C dans deux et que Dieu aide ceux qui le maintiennent! P> BTW, cela ne fonctionnera évidemment pas si vos fichiers M généré. p> p> $ (cc) code>. Cela se sent aussi étrange.
$ (objets) < / CODE> Variables semblables et faites deux règles
Nous pouvons ajouter que ce comportement ou le comportement à la liste des choses que cela devrait être capable de faire facilement, mais n'est pas. Voici un moyen de le faire, en utilisant "Eval" pour créer une règle séparée pour chaque objet.
CPP_OBJECTS = foo.o bar.o OBJECTIVE_OBJECTS = baz.o OBJECTS = $(CPP_OBJECTS) $(OBJECTIVE_OBJECTS) $(CPP_OBJECTS): %.o: %.c $(OBJECTIVE_OBJECTS): %.o: %.m $(OBJECTS): $(CC) $< $(C_OPTIONS) -c -o $@
Je suis d'accord avec la méthode plus robuste - j'utiliserais ça. Mais les objets = macro a besoin de $ (...) sur le RHS.
Faire votre exemple (le second) seulement le premier fichier FOO.O est en cours de génération. Quel est le problème?
Je pense que c'est à cause de ne pas avoir le tous: $ (objets) code> ligne.
@Bogdansikach: Oui, vous devez avoir cette règle si vous voulez que ce soit la valeur par défaut.