Làm cách nào tôi có thể nhận được gmake để đưa cho tôi danh sách tất cả các tệp tạo tệp bao gồm?


7

Tôi đã thừa hưởng một mớ hỗn độn lớn của một mạng makefile mà chính nó được thừa hưởng từ một dự án khác, với các tệp tạo tệp được bao gồm ở khắp mọi nơi. Tôi đang cố gắng thực hiện một thay đổi đơn giản mà không cần đưa ra toàn bộ (mặc dù vậy, tôi chỉ không có thời gian ngay bây giờ).

Có cách nào để dỗ một makefile đầy đủ ra khỏi gmake, tức là , với tất cả các tệp được bao gồm không? Tôi biết làm thế nào để cơ sở dữ liệu bị hủy, nhưng điều đó thật khó theo dõi với tất cả những thứ linh tinh bên ngoài được tải vào.


Tôi tự hỏi liệu điều này có ý nghĩa chung hay không, vì các tệp tạo tệp có thể được tạo động (từ nội dung) sau đó được bao gồm.
vinc17

Điểm hay, nhưng chúng không phải được tạo ra một cách linh hoạt (chẳng hạn như "mớ hỗn độn chính của mạng makefile" đã đề cập ở trên), ngoài ra nó vẫn có thể hữu ích để tìm nơi ẩn giấu mục tiêu rõ ràng.
Joe Sewell

Câu trả lời:



1

Không chắc chắn nếu điều đó hoạt động đệ quy, nhưng những gì về một cái gì đó như:

strace -e trace=open make | grep -i makefile

Bạn nên thêm -fvào strace để theo dõi trẻ em trên ngã ba ...
maxschlepzig

0

Dường như điều makeđó không cung cấp bất kỳ cách dễ dàng nào để làm điều đó, nhưng có lẽ nó sẽ đủ để bạn grep tất cả các includechỉ thị từ tất cả các tệp thực hiện như thế này:

find . -iname 'Makefile' -print0 | xargs -0 grep '^include'

Thử rất hay, nhưng nó không cho tôi bức tranh đầy đủ, vì nó không cho tôi thấy mục tiêu đầu tiên trong mớ hỗn độn là gì. Nó cũng không tính đến các tài liệu lồng nhau, đặc biệt là khi chúng được đặt tên không bao gồm tệp 'Makefile' hoặc bất kỳ tiêu chuẩn tương đương nào và chúng đã ném chúng khắp cây thư mục.
Joe Sewell

Sau đó, tôi không biết một cách dễ dàng để làm điều đó. Có vẻ như bạn là một lập trình viên, vì vậy có lẽ một cách phù hợp với bạn là sửa đổi mã nguồn của makevà thêm một thông báo được in khi một lệnh includeđược xử lý.
Dmitry

0

Những gì bạn đang tìm kiếm là tương đương cc -Evới make. Tôi không nhận thức được một tương đương như vậy. Sử dụng các công cụ bên ngoài sẽ giúp ích trong nhiều trường hợp, nhưng không phải tất cả các trường hợp, do mở rộng thứ cấp .

Nhưng có lẽ điều này có thể giúp bạn tiến một bước gần hơn. Vào cuối Makefile ban đầu, hãy thêm quy tắc này:

.PHONY: printMakefiles
printMakefiles:
        echo $(MAKEFILE_LIST)

Bây giờ bạn có thể tìm ra Makefiles nào được bao gồm bằng cách chạy

make printMakefiles

Xin lưu ý rằng điều này không đáng tin cậy 100%, vì có thể có điều kiện bao gồm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.