Crea: $ (carattere jolly) tenendo aperta una directory
-
03-07-2019 - |
Domanda
Quindi sembra esserci questo problema con la funzione $ (jolly) di GNU Make che mantiene aperta una directory su Windows. Vedi post (senza risposta) " make è in possesso di una directory aperta ??a > " ;. Google non fornisce molte informazioni sull'argomento.
In breve: Makefile usa la funzione $ (carattere jolly) a un certo punto e mantiene aperta una directory, che in genere impedisce a " make clean " regola per fare il suo lavoro correttamente. Rieseguire " rendere pulito " una seconda volta di solito lo risolve.
Sto usando GNU Make versione 3.81 in una DOS-Box standard. L'autore del post collegato sopra sta usando Cygwin.
Qualcuno ha trovato una soluzione per questo?
Soluzione 2
Ho trovato una soluzione alternativa per il problema, che almeno mi consente di lavorare in pace.
Il problema era che la funzione $ (carattere jolly)
veniva usata per raccogliere i file dei sorgenti. La mia regola pulita, tuttavia, elimina solo una directory - non è necessario che la raccolta prenda per favore. Quindi ho praticamente messo la parte del Makefile che deve raccogliere i file dei sorgenti in una dichiarazione condizionale:
# 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
Altri suggerimenti
Sembra una perdita di descrittore di file, va bene - innocuo per processi di breve durata (come make) su UNIX, ma un PITA giusto su Windows.
Dato che si tratta di un bug presumibilmente in vece, al contrario di un problema con il suo utilizzo, dovrebbe essere risolto prima convalidando che esiste ancora quando compilato dal sorgente sulla versione upstream più recente, e poi da inoltra una segnalazione di bug al progetto GNU make (o con qualsiasi distributore con il quale hai un contratto di supporto adeguato ) o immergersi nella fonte e tentare di risolverlo da soli.
Non sarebbe male provare a riprodurlo su Linux: qui è molto più facile verificare la presenza di perdite nel descrittore di file, dato che si può semplicemente guardare / proc / self / fd
(o, per un child of make, / proc / $ PPID / fd
) per cose che non appartengono.