J'essaie de coller deux systèmes de construction ensemble. Les deux sont récursifs (les règles du makefile utilisent make pour appeler d'autres makefiles pour construire les composants du projet). Je vais les appeler 'A' et 'B' où 'A' construit l'application et 'B' construit les bibliothèques utilisées par 'A'. Le makefile de niveau supérieur dans A appelle 'make TARGET = quelquechose', ce qui signifie que tous les bits invoqués récursivement de la construction héritent de la valeur de TARGET en tant que variable en lecture seule, y compris le système de construction de B, qui est appelé dans le cadre de la construction récursive. Je ne veux pas que cela se produise dans le système de construction pour 'B' (qui proviennent d'un projet différent) car les makefiles utilisent TARGET pour leurs propres besoins et la construction échoue car TARGET a la mauvaise valeur et est lecture seulement.Comment puis-je ignorer l'affectation de variable de ligne de commande dans une construction récursive?
Je ne vois que deux solutions à cela, dont aucune n'est palettable;
1) Renommez TARGET en quelque chose d'autre dans le makefile de A qui le définit et dans les makefiles de A qui l'utilisent, pour éviter le conflit avec les niveaux inférieurs du système de construction.
2) Utilisez la directive 'override' partout dans les fichiers makefiles dans B où la variable TARGET est définie, pour remplacer son statut en lecture seule.
Quelqu'un a-t-il eu de meilleures idées? - Idéalement, je veux rien à être héritée par le système de construction de B de A, à l'exception des options que je passe explicitement au système de construction B de A.
Soit dit en passant, j'utilise GNU Make V3.80.
Si vous ne voulez pas définir TARGET dans le makefile de B, pourquoi passez-vous TARGET = quoi dans le makefile de A? – JesperE
Le makefile de niveau supérieur passe TARGET = quelquechose à un makefile de deuxième niveau dans A (qui en a besoin) et le makefile de deuxième niveau dans A appelle ensuite le makefile de B, qui hérite de TARGET en tant que variable en lecture seule de l'environnement deuxième niveau. –