Tiêu chuẩn __DATE__
và __TIME__
macro làm những gì bạn quan sát, trả lại một thời gian chuỗi phụ thuộc.
Nó phụ thuộc vào hệ thống (và có lẽ trình biên dịch) và đáng chú ý là hệ thống xây dựng (ví dụ như GNU make).
Một ý tưởng tốt có thể là liên kết trong một tập tin timestamp riêng biệt, một cái gì đó tương tự (trong make
cú pháp)
timestamp.c:
date +'const char timestamp[]="%c";' > [email protected]
program: $(OBJECTS) timestamp.c
$(LINKER.cc) $^ -o [email protected] $(LIBES)
rm -f timestamp.c
Các timestamp.o
sau đó sẽ được tái sinh và program
của bạn sẽ được liên kết lại ở mọi make
(vì vậy tạo chương trình thực sự sẽ thay đổi, nhưng hầu hết mã số-$(OBJECTS)
làm cho biến số sẽ không thay đổi).
Hoặc, bạn có thể, ví dụ: đăng nhập bên trong một số tệp nhật ký cơ sở dữ liệu hoặc tệp văn bản vào thời điểm liên kết, ví dụ:
program: $(OBJECTS)
$(LINKER.cc) $^ -o [email protected] $(LIBES)
date +'[email protected] built at %c' >> /var/log/build.log
(bạn có thể sử dụng logger
thay vì date
để có được điều đó ghi lại trong nhật ký hệ thống)
Sau đó, tạo ra program
sẽ không thay đổi, nhưng bạn sẽ đã đăng ở đâu đó một xây dựng dấu thời gian. BTW bạn cũng có thể đăng nhập một số kiểm tra (ví dụ: $(shell md5sum program)
trong cú pháp make
) của chương trình nhị phân của bạn.
Nguồn
2013-07-12 10:35:10
Bên cạnh việc lưu nó trong một tệp bổ sung không phải là một phần của bản dựng, tôi không nghĩ rằng có thể ... – Nbr44
Trong trường hợp đó, bạn có thể muốn làm cho hệ thống xây dựng của mình chỉ xây dựng nếu có bất kỳ thay đổi nào. Biên dịch lại chỉ vì lợi ích của biên dịch lại khi không có thay đổi đối với bất kỳ nguồn nào không có ý nghĩa nhiều. –
(Lưu ý: Bạn nên chỉnh sửa bài đăng của mình và thêm backticks xung quanh tên macro: "' ... the \ '__DATE __ \', \ '__TIME __ \' macro ... '", bởi vì hiện tại chúng xuất hiện đậm và không có dấu gạch dưới) –