2010-04-23 23 views
13

Tôi có dự án GCC và muốn tự động thêm định nghĩa cho ngày xây dựng và số sửa đổi (từ git) vào nguồn của tôi. Cách tốt nhất để làm điều này là gì?Tôi làm cách nào để thêm bản sửa đổi và ngày xây dựng vào nguồn?

Mục tiêu của tôi là đơn giản để có thể làm một cái gì đó như thế này khi khởi động:

printf("Test app build on %s, revision %d", BUILD_DATE, REVISION) 

Đối với tòa nhà tôi đang sử dụng thực hiện với một Makefile.inc đơn giản, không autoconf hoặc bất cứ điều gì như thế này.

Trả lời

7

tôi đã kết thúc bằng một lệnh đơn giản như thế này trong Makefile tôi:

echo "#define GIT_REF \"`git show-ref refs/heads/master | cut -d " " -f 1 | cut -c 31-40`\"" > git_ref.h 
4

Thay thế từ khóa RCS không được hỗ trợ bởi Git, nhưng có thể được thêm bằng trình điều khiển lọc gitattributes: Xem "Git equivalent of subversion's $URL$ keyword expansion".

alt text

Ví dụ (không chính xác liên quan đến câu hỏi của bạn, nhưng minh họa nguyên tắc chung):

git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"' 
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"' 

Bạn sẽ căn cứ kịch bản bộ lọc của bạn trên kết quả của git describe --tags gọi từ Makefile của bạn .

Như đã đề cập trong this answer để "Git tương đương với việc mở rộng $ từ khóa $ URL lật đổ của", smudge/điều khiển bộ lọc rõ ràng không phải là một giải pháp hoàn hảo, và thêm bất kỳ loại siêu dữ liệu trực tiếp trong các dữ liệu (nguồn) là generally a bad idea (bạn có một cuộc tranh luận về nó trong "What are the basic clearcase concepts every developer should know?").

Tuy nhiên, bạn có một ví dụ điển hình về việc mở rộng từ khóa Git mở rộng trong this answer trong "Làm cách nào để bật chuỗi nhận dạng cho repo Git?".

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