2010-08-12 42 views
6

Sau gần một thập kỷ mã hóa C# và VC++, tôi quay lại môi trường Linux - g ++ - make - emacs.Cách phát hiện các thay đổi tiêu đề trong danh sách phụ thuộc thực hiện

Đang cố gắng để làm mới bộ nhớ của tôi về cách viết một làm cho tập tin tôi không có nhiều vấn đề, nhưng tôi vấp trong vấn đề sau đây, mà tôi thừa nhận tôi không nhớ cách tôi giải quyết nó trong quá khứ:

Hãy nói rằng rằng một tệp .cpp cụ thể có một số phụ thuộc vào một số tệp tiêu đề khác (đặt sang một bên tiêu đề tương ứng dễ xử lý)… Cách tốt nhất để phát hiện rằng một số .h đã được thay đổi là gì?

Tôi chắc chắn không thích ý tưởng đặt chúng trong danh sách mục tiêu - phụ thuộc của tôi vì đây là quy trình dễ bị lỗi và thủ công!

Câu trả lời dễ dàng là tất nhiên để xây dựng sạch sẽ bất cứ khi nào có thay đổi .h nhưng tôi không thể nhớ lại cách tiêu chuẩn là gì….

Trong VC++ Tôi không phải đối phó với điều này kể từ IDE rất giỏi xử lý phụ thuộc ...

Trả lời

6

Nhìn vào automated dependencies. gcc với cờ -M -MD-MT vv sẽ phân tích tệp của bạn và tính toán các phụ thuộc. Vượt qua chúng thông qua sed. Có rất nhiều ví dụ mà google sẽ tìm thấy.

1

Như @deinst đã đề cập, gcc có khả năng xuất tất cả các tệp tiêu đề mà cpp của bạn sử dụng trực tiếp và gián tiếp. Những gì bạn cần là gần như sau:

obj-file: src-file 

# dep file should be recreated each time header file or header file it depends on is changed 
dep-file: src-file 
    gcc -M ...... > dep-file 
    modify dep-file to make dep-file depend and all header files too 

include dep-file 

Nó đã được triển khai một lần trong dự án mà tôi đã tham gia, nhưng việc thực hiện đầy đủ ý tưởng là dài và phức tạp.

Nếu bạn có khả năng xem xét các công cụ cao hơn hỗ trợ tính năng tự động phát, hãy tạo nó như cmake hoặc scons. Tôi personaly làm việc với cmake - mỗi lập trình viên có thể viết một tập tin cmake và autodepency là miễn phí.

2

deinst và idimba có bạn đi đúng hướng. Để đọc về những cạm bẫy tiềm năng bạn có thể gặp phải và cách tránh chúng, hãy xem bài viết này.

http://mad-scientist.net/make/autodep.html

+0

+1 để có liên kết tốt đẹp – dimba

Các vấn đề liên quan