==========================================
#!/usr/bin/make
vpath %.cpp src
vpath %.c src
vpath %.h include
CC := g++
#SOURCES := socket.cpp UDPSocket.cpp address.cpp
SOURCES := $(notdir $(wildcard src/*.cpp))
OBJ := $(subst .cpp,.o,$(SOURCES))
CPPFLAGS := -I include
.PHONY: all clean
%.o: %.cpp
$(CC) $(CPPFLAGS) -o $@ -c $<
all: $(OBJ)
$(CC) $(CPPFLAGS) -o main main.cpp $(OBJ)
#socket.o: socket.cpp socket.h
# $(CC) $(CPPFLAGS) -o $@ -c $<
include $(subst .cpp,.d,$(SOURCES))
%.d : %.cpp
$(CC) -MM $(CPPFLAGS) $< > $@.$$$$; /
sed 's,/($*/)/.o[ :]*,/1.o $@ : ,g' < $@.$$$$ > $@; /
rm -f $@.$$$$
clean:
rm -f *.o *.d main
再贴个例子,其实差不多少有点变化吧
===============================
SOURCES := $(wildcard *.c)
PROGRAM := $(basename $(SOURCES))
DEPENDENCY = $(subst .c,.d,$(SOURCES))
CFLAGS += -Iapue.2e/include
.PHONY: all clean
all: $(PROGRAM)
%: %.c
gcc $(CFLAGS) $< apue.2e/lib/libapue.a -o $@
ifneq "$(MAKECMDGOALS)" "clean"
include $(DEPENDENCY)
endif
%.d: %.c
gcc -MM $(CFLAGS) $< > $@.$$$$ ; \
sed 's,/($*/)/.o[ :]*,/1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
clean:
rm -f $(PROGRAM)
rm -f $(DEPENDENCY)