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).
"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