Premièrement - je sais qu'il y a beaucoup de discussions similaires à cela, mais j'ai passé des heures sans les travailler pour moi. Mon makefile crée d'abord un répertoire nommé par la date et l'heure actuelles. J'ai ensuite le makefile ajouter à un fichier d'en-tête une ligne qui crée une chaîne avec ce nom de répertoire. Pour cette raison, je dois d'abord copier tous les fichiers source (y compris l'en-tête) dans le sous-répertoire nouvellement créé, afin que je puisse conserver l'en-tête original et modifier seulement l'en-tête qui sera utilisé pour la compilation. Je voudrais ensuite construire dans ce nouveau répertoire.GNU make dans le sous-répertoire nouvellement créé
Mon problème est de faire make pour construire correctement les fichiers .o
dans le nouveau sous-répertoire. La solution que j'ai trouvé est d'avoir
$(NOW)%.o: $(NOW)%.cpp $(CC) -c $(FLAGS) $<
où $(NOW)$
est le nom sous-répertoire. Le problème est que mon $(FLAGS)
semble être ignoré: la sortie est, à peu près
g++ -c -o <.o file> <.cpp file>
(Oui, il y a effectivement l'espace introduit supplémentaire entre g++
et -c
.) Alors que la construction dans le répertoire de niveau supérieur à la
%.o: %.cpp $(CC) -c $(FLAGS) $<
sorties correctement
g++ -c <my flags> -o <.o file> <.cpp file>
Pour résumer, je suis incapable de compiler normalement en transférant les fichiers source dans un sous-répertoire nouvellement créé et en créant les fichiers .o
dans ce répertoire. TYIA.
Affichez la ligne où '$ (FLAGS)' est défini. S'il s'agit d'une variable spécifique à une cible, cela peut entraîner le problème que vous décrivez. De même, si elle est définie en utilisant ': =' et qu'elle est _below_ la cible '$ (NOW)%. O', sa valeur ne sera pas prise en compte dans cette règle. Un makefile plus complet aiderait certainement à diagnostiquer le problème. – blackghost