Question

Il semble donc y avoir un problème avec la fonction $ (joker) de GNU Make qui maintient un répertoire ouvert sous Windows. Voir (sans réponse) post & make tient un répertoire ouvert " ;. Google ne fournit pas beaucoup d'informations sur le sujet.

En bref: le Makefile utilise la fonction $ (caractère générique) à un moment donné, et garde un répertoire ouvert, ce qui empêche généralement le "make clean". règle de faire son travail correctement. Redémarrage de & make; make clean " une seconde fois le résout généralement.

J'utilise GNU Make version 3.81 sous une boîte DOS standard. L'auteur de l'article lié à ci-dessus utilise Cygwin.

Quelqu'un a-t-il trouvé une solution à ce problème?

Était-ce utile?

La solution 2

J'ai trouvé une solution de contournement au problème, qui me permet au moins de travailler en paix.

Le problème était que la fonction $ (caractère générique) était utilisée pour collecter les fichiers sources. Ma règle de nettoyage, cependant, ne supprime qu'un répertoire - il n'est pas nécessaire que la collecte prenne s'il vous plaît. Donc, je mets essentiellement la partie du Makefile qui a besoin de collecter les fichiers sources dans une instruction conditionnelle:

# The clean rule is always parsed
clean:
    rm -rf $(OUTPUT_DIRECTORY)

# The compile rule is only interpreted if we did not invoke 'make clean'. We
# can test the value of $(MAKECMDGOALS) for that:
ifeq ($(filter $(MAKECMDGOALS),clean),)

SOURCE_FILES := $(wildcard ...)

compile:
    g++ $(SOURCE_FILES) ...

endif

Autres conseils

Cela ressemble à une fuite de descripteur de fichier, très bien - inoffensif pour les processus de très courte durée (comme make) sous UNIX, mais un droit PITA sous Windows.

Comme il s’agirait d’un bogue dans make, par opposition à un problème d’utilisation, vous devez l’abord résoudre en validant qu’il existe toujours à partir de la source sur la version la plus récente en amont, puis par archiver un rapport de bogue avec le projet GNU make (ou avec tout distributeur avec lequel vous avez un contrat de support approprié ), ou plonger dans la source et essayer de la réparer vous-même.

Cela ne ferait pas de mal d’essayer de reproduire sous Linux - la recherche de fuites dans les descripteurs de fichiers est beaucoup plus facile ici, car il suffit de regarder / proc / self / fd (ou, pour un enfant de make, / proc / $ PPID / fd ) pour les choses qui n'appartiennent pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top