Frage

So scheint es dieses Problem mit GNU Make des $ (Wildcard) Funktion ein Verzeichnis öffnet auf Windows zu halten. Siehe (unasnwered) post „ machen hält ein Verzeichnis geöffnet “. Google nicht viele Informationen zum Thema zur Verfügung stellen.

Kurz gesagt: das Makefile verwendet die $ (Wildcard) Funktion an einem gewissen Punkt, und hält ein Verzeichnis geöffnet, die in der Regel die „sauber machen“ Regel verhindert, dass seine Arbeit richtig zu tun. Re-running "make clean" ein zweites Mal, es in der Regel löst.

Ich verwende GNU-Version Make 3,81 unter einer Standard-DOS-Box. Der Autor der Post an oben verlinkten verwendet Cygwin.

Hat jemand eine Lösung für dieses gefunden?

War es hilfreich?

Lösung 2

Ich habe eine Abhilfe für das Problem finden, die zumindest mich in Ruhe arbeiten kann.

Das Problem war, dass die $(wildcard) Funktion, um die Quellen-Dateien zu sammeln verwendet wurde. Meine sauber jedoch in der Regel löscht nur ein Verzeichnis - keine Notwendigkeit für das Sammeln bitte zu nehmen. Also habe ich im Grunde den Teil des Makefiles, die die Quelldateien in einer bedingten Anweisung sammeln muss:

# 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

Andere Tipps

Klingt wie ein Dateideskriptor Leck, alles in Ordnung -. Harmlos für sehr-kurzlebige Prozesse (wie Make) auf UNIX, sondern ein Recht PITA unter Windows

Da es sich angeblich um einen Fehler in machen ist, wie bei seiner Verwendung zu einem Problem gegenüber, sollte es zuerst angegangen werden, indem die Validierung, dass es nach wie vor, wenn von der Quelle auf die neueste Upstream-Version, und dann von Einreichung einen Fehlerbericht mit dem GNU-Projekt machen (oder bei jedem Händler, mit denen Sie haben einen entsprechender Support-Vertrag ) oder Tauchen in die Quelle und versuchen, es selbst zu reparieren.

Es wäre nicht auf Linux schaden, um zu versuchen zu reproduzieren - Überprüfung auf Undichtigkeiten Dateideskriptors sind hier viel einfacher, als man nur bei /proc/self/fd aussehen kann (oder, für ein Kind machen, /proc/$PPID/fd) für Dinge, die nicht zu tun gehören.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top