So definieren Sie Regeln im Makefile, um nur die * .cpp-Dateien zu kompilieren, die geändert wurden (und ihre Abhängigkeiten), nicht alle * .cpp-Dateien
Sagen wir, ich habe Dateien:
Libs:
one.cpp, one.h two.cpp, two.h three.cpp, three.hProgramm
program.cppIst es möglich, ein Makefile zu erstellen, das nur die * .cpp kompiliert, die seit der letzten Kompilierung geändert wurden?
Derzeit habe ich so etwas:
SRCS = one.cpp two.cpp three.cpp
OBJS = $(SRCS:.cpp=.o)
all: $(OBJS) program
.cpp.o:
g++ -Wall -c SRCS = one.cpp two.cpp three.cpp
OBJS = $(SRCS:.cpp=.o)
all: $(OBJS) program
.cpp.o:
g++ -Wall -c $<
program:
g++ -Wall $(OBJS) program.cpp -o program
clean:
rm -f $(OBJS) program
lt;
program:
g++ -Wall $(OBJS) program.cpp -o program
clean:
rm -f $(OBJS) program
Ich arbeite gut, aber wenn ich mein Programm kompiliere und dann two.cpp oder two.h ändere, muss ich zuerst "make clean" ausführen, denn wenn ich zweitens "make" ausführe, erhalte ich:
Nothing to be done for 'all'.
Ich möchte mein Makefile auf diese Weise ändern, es würde meine Änderungen erkennen und diese Datei und ihre Abhängigkeiten neu kompilieren (wenn one.cpp Code aus two.cpp verwendet, der geändert wurde, sollten beide Dateien neu kompiliert werden).
So wenn ich two.cpp ändere, sollte make tun:
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
Aber wenn one.cpp Code aus two.cpp verwendet, der geändert wurde, muss shold do:
g++ -Wall -c one.cpp
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program