2014-12-10 9 views
9

Chciałbym umieścić moją wersję oprogramowania w moim kodzie, a następnie pobrać ją z programu binarnego za pomocą komendy takiej jak: -v lub --version. Jako przykład niektóre z plików binarnych oprogramowania GNU/Linux drukować swoje informacje o wersji, gdy dostarczane z -v lub -V argument w linii poleceń wziąć ls jako przykład:poprawny sposób kodowania/osadzania numeru wersji w kodzie programu

$ ls --version 
ls (GNU coreutils) 8.13 
Copyright (C) 2011 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 

Czy istnieje Konwencja lub standard to zrobić? Próbowałem wyszukać te informacje, ale ponieważ nie znałem właściwej terminologii, moje wyniki wyszukiwania zawierały jedynie wskazówki do kontroli wersji. Kod oprogramowania napisany jest w języku C++, jeśli pomaga lepiej rozwiązać problem.

Odpowiedz

11

Normalnie, dla większych i mniejszych numery wersji (jak w, 1,2, 1 jest głównym i 2 jest niewielka), najczęściej są pisane bezpośrednio w kodzie, zwykle jako #define (ponieważ mogą być potrzebne do kompilacji warunkowych, tj. #if bloków).

Zazwyczaj ma się osobny nagłówek zawierający tylko te definicje i nic poza tym (z wyjątkiem nagłówka-strażnika), aby zminimalizować zależności.

Niektórzy używają systemu kompilacji (np. Cmake), aby pobrać numer wersji z kontrolki wersji (git, svn, cvs itd.), A następnie umieścić ten numer wersji w nagłówku "version". Lub umieszczają numer wersji w plikach konfiguracyjnych systemu kompilacji, a następnie umieszczają go na nagłówku, jak pokazano na cmake tutorial. Osobiście nie podoba mi się to podejście, ponieważ zbyt często modyfikuje pliki nagłówkowe i powoduje częste i bezsensowne rekompilacje.

Preferuję napisać numer wersji w pliku nagłówkowym, a następnie wyciągając numery wersji (główne, drobne, ..) z nagłówka na system kompilacji. Jest to kolejna rzecz, którą cmake może bardzo łatwo zrobić.

Jeśli chcesz umieścić w oprogramowaniu numer wersji z dnia na dzień, taki jak numer kompilacji lub numer wersji, nie należy umieszczać go w pliku nagłówkowym jako , ale jako extern const zmienna zdefiniowana w jednym pliku cpp. Na przykład, możesz użyć cmake'a do pobrania numeru wersji z systemu kontroli wersji, dodaj go do pliku cpp, który definiuje tę zmienną extern const int revision; (poprzez funkcję cmake'a configure_file) i połącz swoje programy z tym plikiem cpp/object. W ten sposób numer wersji jest automatycznie wbudowywany w twoje programy przy każdej przebudowie i nie powoduje pełnej rekompilacji za każdym razem, gdy jest aktualizowany (co jest przy każdym zatwierdzeniu).

Chodzi o to, że główne i podrzędne numery wersji nie są zmieniane wystarczająco często, aby wymagać jakiejkolwiek automatycznej konserwacji, ale trzeba ręcznie zapisać je w jednym miejscu i automatycznie propagować je wszędzie tam, gdzie może to być istotne (Polecam, aby to miejsce było plikiem nagłówkowym). To tylko numery wersji lub kompilacji, które muszą być w pełni zautomatyzowane (generowane przez kontrolę wersji i propagowane automatycznie wszędzie).

+1

"Wolę wpisywać numer wersji w pliku nagłówkowym, a następnie wyciągnąć numery wersji z nagłówka do systemu kompilacji."Czy istnieje jakaś szansa na rozszerzenie tego, jak to zrobiłeś? – Mohan

2

Uważam, że zwykle zachowuje się numer wersji w dedykowanym pliku nagłówkowym. Niektóre narzędzia mogą automatycznie wygenerować to za Ciebie. Na przykład tutaj jest, jak to zrobić z CMake: http://www.cmake.org/cmake-tutorial/ Patrz sekcja „Dodawanie numeru wersji i skonfigurowanego nagłówka pliku”

+0

Ta opcja jest świetna, ale zastanawiam się, czy istnieje sposób, aby to zrobić bez nadpisywania plików CMake. – rien333

Powiązane problemy