Powiedzmy mam pliki:Jak zdefiniować reguły w Makefile skompilować tylko, że pliki * .cpp, który został zmodyfikowany (i ich zależności), nie wszystkie pliki * .cpp
Libs:
- one.cpp, one.h
- two.cpp, two.h
- three.cpp, three.h
Program:
- program.cpp
Czy istnieje sposób, aby stworzyć Makefile, który będzie kompilować tylko że * .cpp, które zostały zmodyfikowane od ostatniego zestawienia?
Obecnie mam coś takiego:
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
I działa dobrze, ale kiedy mogę skompilować mój program, a następnie zmienić two.cpp lub two.h trzeba uruchomić "make clean" po pierwsze, dlatego, gdy i po drugie uruchomić „make” pojawia się:
Nothing to be done for 'all'.
chciałbym zmienić mój Makefile w ten sposób, by to rozpoznać moje zmiany i skompilować ten plik i jego zależności (jeśli one.cpp wykorzystuje kod z two.cpp który został zmodyfikowany, oba pliki powinny zostać ponownie skompilowane).
Więc jeśli zmodyfikować two.cpp, zrobić należy zrobić:
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
Ale jeśli one.cpp wykorzystuje kod z two.cpp który został zmodyfikowany, należy shold zrobić:
g++ -Wall -c one.cpp
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
(Myślę, że masz na myśli 'one.cpp', a nie' first.cpp'.) – Beta
Tak, powinno to być jedno.cpp. – user360872