Это мой текущий make файл.
CXX = g++
CXXFLAGS = -Wall -O3
LDFLAGS =
TARGET = testcpp
SRCS = main.cpp object.cpp foo.cpp
OBJS = $(SRCS:.cpp=.o)
DEPS = $(SRCS:.cpp=.d)
.PHONY: clean all
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $(TARGET)
.cpp.o:
$(CXX) $(CXXFLAGS) -c $< -o [email protected]
%.d: %.cpp
$(CXX) -M $(CXXFLAGS) $< > [email protected]
clean:
rm -f $(OBJS) $(DEPS) $(TARGET)
-include $(DEPS)
Он отлично работает с одним исключением. Если каталог уже чист (нет *.d, *.o), и я запускаю "make clean", он повторно создает зависимости, а затем сразу же удаляет их:
[[email protected] proj]$ make
g++ -M -Wall -O3 foo.cpp > foo.d
g++ -M -Wall -O3 object.cpp > object.d
g++ -M -Wall -O3 main.cpp > main.d
g++ -Wall -O3 -c main.cpp -o main.o
g++ -Wall -O3 -c object.cpp -o object.o
g++ -Wall -O3 -c foo.cpp -o foo.o
g++ -Wall -O3 main.o object.o foo.o -o testcpp
[[email protected] proj]$ make clean
rm -f main.o object.o foo.o main.d object.d foo.d testcpp
[[email protected] proj]$ make clean
g++ -M -Wall -O3 foo.cpp > foo.d
g++ -M -Wall -O3 object.cpp > object.d
g++ -M -Wall -O3 main.cpp > main.d
rm -f main.o object.o foo.o main.d object.d foo.d testcpp
[[email protected] proj]$
Я не понимаю, почему вторая "make clean" будет повторно генерировать файлы зависимостей. Как я могу избежать этого? Это не очень важно для этого надуманного примера, но для большого проекта это может быть довольно трудоемким.
Спасибо.