Ändern Sie die Makefile-variable mit dem Wert je nach einem Ziel,
Ich bin nicht versiert im Umgang mit makefiles, aber ich bin verwendet, um einfachen. Jetzt habe ich eine Aufgabe auf der hand.
Ich brauche zu kompilieren und verknüpfen die Anwendung eines Tests mit einer anderen Bibliothek und andere include-Pfad basierend auf dem gegebenen Ziel. Wenn sich das Ziel TARGET1, dann link gegen LIB1 und gehören INCLUDEPATH1 während der Kompilierung. Ebenso, wenn gegebene Ziel ist, TARGET2, dann kompilieren mit INCLUDEPATH2 in CFLAGS und link mit LIB2.
%.o: %.c
@echo [CC] $< ...
$(CC) $(CFLAGS) -o $*.o $<
Nun habe ich eine Regel wie oben, die kompiliert meine test-Anwendung. Wie kann nun die CFLAGS geändert werden, basierend auf dem Ziel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du GNU Make verwenden, können Sie target-spezifische Variablen:
Aber das funktioniert nicht ganz so gut, wie Sie möchten: wenn target1 und target2 teilen Sie einige Quelldateien haben, müssen Sie arrangieren für Sie zu jeder kompiliert werden zweimal unterschiedlich benannt .o-Dateien-das wird eher complexify Ihrem makefile.
Auch, wenn Sie
make target1
dann-IINCLUDEPATH1
weitergegeben wird, die an der Zusammenstellung der misc.c, wie gewünscht. Allerdings, wenn Sie Typmake misc.o
es hat keine Möglichkeit zu wissen, dass dies ist schließlich prädestiniert für target1 und die Zusammenstellung der misc.c wird keine spezielle $CFLAGS Wert (obwohl er das Globale, wenn es eine ist).Also das ist wirklich nur sinnvoll, in einfachen Fällen. Aber vielleicht ist dein Fall ist einfach genug.
Ich glaube nicht, dass Sie ändern können variabel, je nach Ziel. Angenommen, Sie rufen
Welchen Wert würde die
CFLAGS
haben dann?In diesem Fall, können Sie nicht-Muster-Regeln zu unterscheiden, Ziele.
Verringern, Wiederholung, können Sie auch Variablen verwenden und "Funktionen". Dann konnte Sie wieder verwenden, was wäre der Körper von Ihr Muster in der Regel in unterschiedlichen Regeln.
Machen würden, nicht schön genug und flexibel makefile, das Ihren Bedürfnissen entspricht.