problème de dépendance avec gnu make
-
06-09-2019 - |
Question
Je suis face à un problème assez étrange faire. Mon fichier make contient:
all: item1 item2
item1: dep1 dep2
dep1:
@echo
cd $(HOME)/apps; /bin/rm -f $(D_ALL_OBJECTS)
cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D_ALL_OBJECTS)
@echo
dep2:
@echo
cd $(HOME)/apps; /bin/rm -f $(D2_ALL_OBJECTS)
cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D2_ALL_OBJECTS)
@echo
item2: ...
.....
« make -f Makefile item1
» fonctionne, mais lorsque je tente « make -f Makefile all
» ça ne marche pas. Avez-vous les gens voient des problèmes dans mon makefile?
Merci
Addendum :
Eh bien, il semble que faire ne permet pas d'objectifs qui ont même nom que dans un répertoire du niveau actuel. Observation:
- "all" est un répertoire @ $ (HOME) / apps
-
all1: item1 item2
fonctionne -
all: item1 item2
ne fonctionne pas
un nom de cible ayant même nom qu'un répertoire semble échouer (comme, ne parvient pas à faire quoi que ce soit utile).
Je suis assez sûr que je suis en train de faire quelque chose absurdement mal ici.
La solution
Lorsque vous écrivez:
all: item1 item2
et demander make all
, qui dit make
:
- Trouver un objet système de fichiers appelé
all
et faire tout ce que cela dépend (item1
,item2
) est à jour. - Si
all
n'existe pas ou est obsolète w.r.t ou l'autre des objets du système de fichiers appeléitem1
ouitem2
, puis effectuez les actions spécifiées (aucun dans cet exemple), puis envisagerall
à jour. - Si
all
est un répertoire, il existe. Si elle a été modifiée récemment, il sera à jour.
La suggestion d'utiliser .PHONY: all item1 item2
est bon pour GNU Make; il ne fonctionne pas avec d'autres variantes de make
.
Ne pas utiliser des noms de cibles qui sont des noms de répertoire - sauf si vous êtes sûr que vous savez ce que vous faites. Et utiliser .PHONY
.
Autres conseils
Essayez -phony déclarant votre tout- cible.
Eh bien ressemble à faire ne permet pas de cibles qui ont même nom que dans un répertoire du niveau actuel. Observation:
- "tout" est un @ répertoire $ (HOME) / apps -all1 / 2/3: Item1 item2 fonctionne -Toutes: Item1 item2 ne fonctionne pas est le tout nom de cible ayant même nom que le répertoire
.Je suis assez sûr que je suis en train de faire quoi que ce soit absurdement mal ici.