28 Stimmen

gnu make dazu zwingen, Objekte, die von der Compiler-Definition betroffen sind, neu zu erstellen

Ich habe ein Makefile, das Optionen an der Kommandozeile entgegennimmt

make OPTION_1=1

Auf der Grundlage des Wertes werden zusätzliche Compiler-Definitionen zu einer Teilmenge von Objekten hinzugefügt.

ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif

Die Änderung der Definition wirkt sich auf den Inhalt der eingebundenen Header-Datei aus - ein Stub oder eine Implementierung wird den Objektdateien ausgesetzt.

Wie kann ich make dazu bringen, die von dieser Optionsänderung "betroffenen" Dateien neu zu erstellen?

47voto

slowdog Punkte 5906

Ich verwende eine Datei, um den letzten Wert solcher Optionen zu speichern, etwa so:

.PHONY: force
compiler_flags: force
    echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@

El cmp || echo Bit bedeutet, dass die Datei compiler_flags wird nur berührt, wenn sich die Einstellung ändert, so dass man jetzt etwas schreiben kann wie

$(OBJECTS): compiler_flags

um einen Neuaufbau von $(OBJECTS) wenn sich die Compiler-Flags ändern. Die Regel für compiler_flags wird jedes Mal ausgeführt, wenn Sie make ausführen, aber ein Rebuild von $(OBJECTS) wird nur ausgelöst, wenn die compiler_flags Datei tatsächlich geändert wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X