2010-11-11 8 views
19

Trong trường hợp bản thân Makefile bị thay đổi, đặt cược an toàn sẽ là xem xét tất cả các mục tiêu đã lỗi thời.Tùy thuộc vào tập tin tự tạo

Có cách thông minh nào để thêm sự phụ thuộc này không? Có lựa chọn thay thế nào không?

+1

Tôi đã hỏi cùng một câu hỏi cách đây không lâu: http://stackoverflow.com/questions/3871444/making-all-rules-depend-on-the-makefile-itself – reinierpost

+0

Lạ lẫm rằng nó không xuất hiện trong một tìm kiếm, nó thậm chí không liên quan. –

+0

Điều này có thể không đủ. Điều gì sẽ xảy ra khi các biến thay đổi? (Ví dụ, bạn có thể cần phải thực hiện một _clean_ giữa 'make CDEFS = debug' và' make CDEFS = release'.) – bobbogo

Trả lời

6

Đặt cược an toàn, nhưng là một ý tưởng tồi tệ. Ví dụ: bạn đang sử dụng tự động và cập nhật Makefile.am để thêm một tệp nguồn duy nhất. Câu trả lời đúng là biên dịch tập tin mới và liên kết nó. Trong kế hoạch của bạn mọi thứ sẽ được xây dựng lại.

Hơn nữa, thêm các phụ thuộc sẽ không làm bất cứ điều gì trừ khi bạn chạm vào tập tin, một cái gì đó như:

$(SRCS): Makefile 
    touch [email protected] 

này sau đó sẽ đi lên biên tập viên mà sử dụng mtime để phát hiện đồng thời sửa đổi (emacs là một thí dụ).

Nếu bạn đang làm điều gì đó quan trọng, chỉ cần chạy make clean all sau khi thực hiện thay đổi.

+0

Tôi không nghĩ rằng các nguồn sẽ không được cập nhật. Nhưng nếu tất cả _targets_ phụ thuộc vào Makefile thì sao? 1 để nâng cao điểm tốt. –

+0

@Matt Joiner: Nó sẽ hoạt động (bạn cũng sẽ phải bao gồm việc đóng cửa chuyển tiếp của tất cả các tệp .mk được bao gồm), nhưng bạn vẫn có biên dịch thừa, thường xuyên hơn không. Tốt hơn là không bận tâm: sau đó bạn có các bản dựng ngắn theo mặc định và khả năng tạo một bản dựng đầy đủ nếu cần. Nếu bạn đặt nó vào trong, bạn không có cách nào để thực hiện việc xây dựng ngắn nếu bạn chỉ thực hiện một tinh chỉnh nhỏ. Tôi biết bạn làm rất nhiều công cụ C++. Bạn không thể nghiêm túc đề nghị rằng chi phí của việc xây dựng lại toàn bộ một dự án C++ là nhỏ? –

+0

Tại sao bạn phải chạm vào Makefile? Quy tắc chỉ chạy nếu Makefile đã mới hơn các tệp đối tượng. –

4

Hãy chắc chắn rằng các tập tin đối tượng phụ thuộc vào makefile:

$(OBJFILES) : Makefile 

đâu Makefile là tên của làm cho tập tin.

+0

Tôi cho rằng mình được yêu cầu tự điền SRCFILES? –

+0

Đúng. Câu hỏi của tôi có vẻ hơi kiêu ngạo nhưng những gì tôi muốn hỏi là loại tài sản bạn muốn từ một giải pháp thay thế. Tôi không biết cách nào để tạo sự phụ thuộc vào "mọi mục tiêu". –