2010-05-05 14 views
6

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?

Trả lời

8

Các giải pháp rất dễ dàng, không -include tạo file dưới sạch:

ifneq ($(MAKECMDGOALS),clean) 
    -include $(DEPFILES) 
endif 
Các vấn đề liên quan