2011-03-11 31 views
6

Tôi muốn ứng dụng Qt/C++ của mình biết phiên bản nào. Nó nên biết rằng không phải từ một số tập tin cấu hình, nhưng với số phiên bản được biên dịch thành nhị phân ứng dụng. Bản thân phiên bản là chuỗi như "XYZ", trong đó X là số phiên bản chính, Y là số phiên bản phụ và Z là bản sửa đổi trong SVN (hoặc số sửa đổi trong SVN trừ đi số sửa đổi khi phiên bản "XY0" xuất hiện). Bạn nghĩ gì là cách đơn giản nhất để thực hiện điều này với scons?Các phương pháp hay nhất để quản lý các phiên bản có scons?

+1

Nếu mục đích duy nhất của số phiên bản là để hiển thị một cái gì đó cho người sử dụng, một chuỗi là OK. Nếu có bất kỳ quyền truy cập có lập trình nào, bạn sẽ muốn có từng thành phần phiên bản trong một trường riêng biệt (xem http://stackoverflow.com/questions/2195573/why-use-a-nested-ruby-module-for-version- thông tin/2195824 # 2195824). Ngoài ra, để dễ dàng tự động tăng số phiên bản (ví dụ: đối với tập lệnh tạo bản phát hành), việc tách phiên bản thành các trường là một chiến thắng. –

Trả lời

8

SCons có SubstfileTextfile nhà xây dựng để tạo tệp. Vì vậy, hãy tạo một hàm để tính toán phiên bản (bằng cách sử dụng pysvn hoặc bằng cách gọi lệnh svn) và viết đầu ra của nó vào tệp bằng cách sử dụng Substfile (lấy mẫu từ tệp) hoặc Textfile (chỉ viết nội dung được cung cấp). Soạn thảo và liên kết tệp đó với phần còn lại của ứng dụng.

Các tập tin phải là một tập tin nguồn (không một tiêu đề) với nội dung tương tự (giả sử C/C++, nhưng các kỹ thuật tương tự sẽ là thích hợp với ngôn ngữ bất kỳ):

char *VERSION = "X.Y.Z"; 

(và bất kỳ khác các định dạng thay thế bạn muốn) và khai báo

extern char *VERSION; 

ở một nơi nào đó, hơn một tệp sẽ được biên dịch lại và ứng dụng được liên kết lại (do đó một số nguồn khác có thể thay đổi quá, phải).

+1

+1. Đặt giá trị phiên bản trong tệp nguồn là một ý tưởng hay. Tôi thấy hữu ích khi tạo tiêu đề (không cần phải sửa đổi) với các hàm truy cập cho 1. chuỗi phiên bản và 2. cấu trúc phiên bản có các trường riêng biệt cho các giá trị lớn, nhỏ, v.v. –

+0

Cảm ơn câu trả lời, tôi sẽ đi với câu trả lời này. Xin lỗi vì quá chậm để chấp nhận. – Septagram

+0

Ngoài ra, @Dave, đúng vậy. – Septagram

1

Dưới đây là một số câu trả lời khác đến từ danh sách gửi thư [scons-users].

Brian Cody:

Một dòng lệnh tùy chọn chúng tôi vượt qua thành scons là phiên bản kho lưu trữ của SVN đại diện. Sau đó, chúng tôi đặt số này vào một định nghĩa (-DREP_NUM = \ "123 \") và xây dựng một chuỗi trong mã C++ của chúng tôi sử dụng số số này. Đó là cho máy chủ của chúng tôi chạy các bản dựng . Đối với các bản dựng cục bộ, chúng tôi thực sự sử dụng tên người dùng thay vì số phiên bản , vì ai đó đang xây dựng phiên bản địa phương XYZ không nhất thiết phải bằng XYZ của người khác (trong cửa sổ, env var USERNAME chứa người dùng đã đăng nhập). Một xem xét khác là việc thay đổi bất kỳ phần nào của tuyên bố biên dịch trong các ô có nghĩa là mục tiêu là tự động lỗi thời. Để làm việc xung quanh vấn đề này, hệ thống xây dựng của chúng tôi chọn ra một mục tiêu đối tượng mà thực sự quan tâm đến các cờ và nó chỉ chuyển cờ đến biên soạn một đối tượng đó.

Chúc may mắn

Gary Oberbrunner:

Tôi muốn tôi Qt/C++ ứng dụng để biết phiên bản nào nó được.

Có một số thông tin tại http://www.scons.org/wiki/BuildNumberProcessing có thể hữu ích.

- - Gary

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