GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menyematkan informasi versi ke dalam pustaka bersama dan biner?

Untuk memperluas jawaban @sashang, sambil menghindari masalah "$Id:$" yang disebutkan oleh @cdunn2001, ...

Anda dapat menambahkan file "version_info.h" ke proyek Anda yang hanya memiliki:

#define VERSION_MAJOR "1"
#define VERSION_MINOR "0"
#define VERSION_PATCH "0"
#define VERSION_BUILD "0"

Dan di file main.c Anda ada baris:

static char version[] = VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH "." VERSION_BUILD;
static char timestamp[] = __DATE__ " " __TIME__;

(atau bagaimanapun Anda ingin menggunakan nilai ini dalam program Anda)

Kemudian atur langkah pra-bangun yang membaca file version_info.h, menabrak angka dengan tepat, dan menulisnya kembali. Build harian hanya akan menambah nomor VERSION_BUILD, sementara rilis yang lebih serius akan menambah nomor lainnya.

Jika makefile Anda mencantumkan ini pada daftar prasyarat objek Anda, build akan mengkompilasi ulang apa yang diperlukan.


Kompiler Intel Fortran dan C++ pasti bisa melakukan ini, gunakan -sox pilihan. Jadi, ya ada caranya. Saya tidak mengetahui adanya konvensi luas untuk menyematkan informasi semacam itu dalam biner dan saya biasanya menggunakan Emacs dalam mode hexl untuk membaca informasi yang disematkan, yang cukup meretas.

'-sox' juga menyematkan opsi kompiler yang digunakan untuk membuat file yang dapat dieksekusi, yang sangat berguna.


Salah satu cara untuk melakukannya jika menggunakan cvs atau subversion adalah memiliki string id khusus yang diformat secara khusus di file sumber Anda. Kemudian tambahkan pre-commit hook ke cvs atau svn yang memperbarui variabel khusus tersebut dengan versi baru file ketika perubahan dilakukan. Kemudian, ketika biner dibangun, Anda dapat menggunakan ident untuk mengekstrak informasi tersebut. Misalnya:

Tambahkan sesuatu seperti ini ke file cpp Anda:

static char fileid[] = "$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $";

Dan menjalankan ident (yang dapat Anda temukan dengan menginstal rcs) pada program akan menampilkan info tentang file yang memiliki string id di dalamnya.

ident program
program:
    $Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $

Catatan Seperti yang disebutkan orang di komentar, teknik ini kuno. Memiliki sistem kontrol sumber secara otomatis mengubah kode sumber Anda adalah jelek dan fakta bahwa kontrol sumber telah meningkat sejak hari-hari ketika cvs adalah satu-satunya pilihan berarti Anda dapat menemukan cara yang lebih baik untuk mencapai tujuan yang sama.


Linux
  1. `^m` Dan Bagaimana Cara Menghilangkannya?

  2. Bagaimana Cara Menulis File Ke Yang Lain?

  3. Cara menginisialisasi perpustakaan bersama di Linux

  1. peringatan libpng:Versi libpng tidak kompatibel dalam aplikasi dan pustaka

  2. Cara mengatur googleTest sebagai perpustakaan bersama di Linux

  3. Bagaimana saya bisa menautkan ke versi lama dari perpustakaan bersama

  1. Cara menginstal dan mengkonfigurasi VSFTPD

  2. Cara memeriksa Versi OS dan Linux

  3. libstdc++.so.5:tidak dapat membuka file objek bersama - tetapi pustaka diinstal dan mutakhir