Câu trả lời:
Từ cấu hình và cấu hình Kernel trong Linux 2.5 (phần tôi trích dẫn các giao dịch với các thay đổi mang lại trong hạt nhân 2.5 / 2.6):
Biên dịch các đối tượng và mô-đun tích hợp trong một lần chạy, nhận ra các đối số dòng lệnh đã thay đổi [...]
Vấn đề hiệu năng chính cho việc xây dựng kernel là các yêu cầu tạo ra (phần lớn thời gian dĩ nhiên là dành cho việc biên dịch / liên kết, nhưng chi phí này không phụ thuộc vào hệ thống xây dựng được sử dụng). thực hiện phải đọc tệp Make-local cục bộ, các quy tắc chung và tất cả các phụ thuộc và tìm ra công việc sẽ được thực hiện từ đó. Do đó, một cách rõ ràng để tối ưu hóa hiệu suất của hệ thống xây dựng là để tránh các yêu cầu không cần thiết. [...]
Một lược đồ linh hoạt hơn để xử lý các dòng lệnh thay đổi trong GNU make đã được tạo. Việc sử dụng thực tế khá đơn giản, thay vì viết lệnh trực tiếp vào phần lệnh của quy tắc, thay vào đó, nó được gán cho biến
cmd_link_l_target
và hệ thống xây dựng đảm nhiệm việc thực hiện lệnh khi cần thiết, theo dõi các thay đổi của chính dòng lệnh . Việc thực hiện hoạt động như sau. Sau khi thực hiện lệnh, macroif_changed
, ghi lại dòng lệnh vào tệp.<target>.cmd
. Khi make được gọi lại trong quá trình xây dựng lại, nó sẽ bao gồm các.*.cmd
tệp đó. Khi nó cố gắng quyết định có xây dựng lại hay khôngL_TARGET
, nó sẽ tìm thấyFORCE
trong các điều kiện tiên quyết, điều này thực sự buộc nó phải luôn chạy lại phần lệnh của quy tắc.
Về cơ bản, đây là tối ưu hóa biên dịch kernel. Những tập tin này được sử dụng để ngăn chặn hoạt make
động quá nhiều khi không cần thiết. Như bạn có thể đọc ở trên, một some_name.o.cmd
tệp sẽ ở đó để theo dõi những gì đã được thực hiện / cần phải được thực hiện khi biên soạn some_name.o
.
Để biết thêm thông tin, hãy xem phần 4.5 của tài liệu tôi đã liên kết trước đó ( Có gì mới trong kbuild của Linux-2.5 / 2.6? ).