Tôi có một vài dự án C và C++ mà tất cả đều theo một cấu trúc cơ bản mà tôi đã sử dụng trong một thời gian. Tệp nguồn của tôi đi theo số src/*.c
, tệp trung gian trong obj/*.[do]
và tệp thực thi thực tế trong thư mục cấp cao nhất.Bỏ qua việc tạo phụ thuộc vào makefile cho các mục tiêu nhất định (ví dụ: `clean`)
makefiles tôi theo khoảng mẫu này:
# The final executable
TARGET := something
# Source files (without src/)
INPUTS := foo.c bar.c baz.c
# OBJECTS will contain: obj/foo.o obj/bar.o obj/baz.o
OBJECTS := $(INPUTS:%.cpp=obj/%.o)
# DEPFILES will contain: obj/foo.d obj/bar.d obj/baz.d
DEPFILES := $(OBJECTS:%.o=%.d)
all: $(TARGET)
obj/%.o: src/%.cpp
$(CC) $(CFLAGS) -c -o [email protected] $<
obj/%.d: src/%.cpp
$(CC) $(CFLAGS) -M -MF [email protected] -MT $(@:%.d=%.o) $<
$(TARGET): $(OBJECTS)
$(LD) $(LDFLAGS) -o [email protected] $(OBJECTS)
.PHONY: clean
clean:
-rm -f $(OBJECTS) $(DEPFILES) $(RPOFILES) $(TARGET)
-include $(DEPFILES)
Bây giờ tôi đang ở điểm mà tôi đang đóng gói này cho một hệ thống Debian. Tôi đang sử dụng debuild
để xây dựng gói nguồn Debian và pbuilder
để xây dựng gói nhị phân. Bước debuild
chỉ phải thực hiện mục tiêu clean
, nhưng ngay cả điều này cũng làm cho các tệp phụ thuộc được tạo và bao gồm.
Tóm lại, câu hỏi của tôi thực sự là: Bằng cách nào đó tôi có thể ngăn chặn việc tạo phụ thuộc khi tất cả những gì tôi muốn là chạy mục tiêu clean
?