Điều đầu tiên bạn nên ghi nhớ (chỉ để loại bỏ bất kỳ sự hiểu lầm nào) là chúng ta không nói về một đơn so với nhiều makefiles. Việc tách tập tin makefile của bạn thành một trong mỗi thư mục con có lẽ là một ý tưởng hay trong mọi trường hợp.
Tệp đệ quy đệ quy là chủ yếu do bạn phân đoạn cây phụ thuộc của bạn thành nhiều cây. Điều này ngăn cản sự phụ thuộc giữa các trường hợp làm cho việc thể hiện chính xác. Điều này cũng gây ra (các phần của) cây phụ thuộc được tính toán lại nhiều lần, đó là vấn đề hiệu suất cuối cùng (mặc dù thường không phải là vấn đề lớn.)
Có một vài thủ thuật bạn cần sử dụng để sử dụng đúng cách tiếp cận đơn, đặc biệt khi bạn có một cơ sở mã lớn:
Đầu tiên, hãy sử dụng GNU (bạn đã làm, tôi thấy). GNU tạo ra một số tính năng đơn giản hóa mọi thứ, và bạn sẽ không phải lo lắng về sự tương thích.
Thứ hai, sử dụng giá trị biến mục tiêu cụ thể.Điều này sẽ cho phép bạn có, ví dụ, các giá trị khác nhau của CFLAGS cho các mục tiêu khác nhau, thay vì buộc bạn phải có một CFLAGS duy nhất trong toàn bộ làm cho bạn:
main: CFLAGS=-O2
lib: CFLAGS=-O2 -g
Thứ ba, chắc chắn rằng bạn sử dụng VPATH/vpath đến mức độ đầy đủ được hỗ trợ bởi GNU.
Bạn cũng muốn đảm bảo rằng bạn không có nhiều tệp nguồn có cùng tên. Một hạn chế của VPATH là nó không cho phép bạn có các định nghĩa VPATH mục tiêu cụ thể, do đó tên của các tệp nguồn của bạn sẽ phải cùng tồn tại trong một "không gian tên VPATH" duy nhất.
Câu trả lời hay, cảm ơn! Tôi đang thực sự sử dụng VPATH ngay cả đối với một dự án sử dụng đệ quy làm cho các tập tin, nó làm cho dễ dàng hơn rất nhiều, đặc biệt là cho srcdir! = Builddir xây dựng. –