7
votes

Dans GNU FAIT, les conditions préalables dans une règle de modèle statique ont-elles différents suffixes

Notre fichier compilera .C Fichiers source avec une règle de modèle statique comme ceci: xxx

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.

est un moyen de rendre la règle ci-dessus plus flexible pour accueillir des fichiers .C et .m?

merci


0 commentaires

3 Réponses :


1
votes

ne pas vraiment copier simplement sur xxx


2 commentaires

Cela donnera des erreurs. Pour la première instance, aucun %. M Les fichiers seront trouvés (erreur!), Et pour le second - non %. C (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



-1
votes

L'appel au même compilateur est juste une occasion heureuse. Normalement, vous ne compilez pas de code Objective-C avec $ (cc) . Cela se sent aussi étrange.

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 $ (objets) < / CODE> Variables semblables et faites deux règles (que vous devriez vraiment faire) . Trop ennuyeux. Au lieu de cela, prenez un hack! xxx

et que Dieu aide ceux qui le maintiennent!

BTW, cela ne fonctionnera évidemment pas si vos fichiers M généré.


0 commentaires

7
votes

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) $&lt $(C_OPTIONS) -c -o $@ 


4 commentaires

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) ligne.


@Bogdansikach: Oui, vous devez avoir cette règle si vous voulez que ce soit la valeur par défaut.