GNU/Linux >> Znalost Linux >  >> Linux

Jak vložit informace o verzi do sdílené knihovny a binárního souboru?

Chcete-li rozšířit odpověď @sashang a zároveň se vyhnout problémům „$Id:$“, které zmiňuje @cdunn2001, ...

Do svého projektu můžete přidat soubor "version_info.h", který má pouze:

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

A v souboru main.c mějte řádek:

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

(nebo jakkoli chcete tyto hodnoty použít ve svém programu)

Poté nastavte krok předběžného sestavení, který přečte soubor version_info.h, vhodně upraví čísla a znovu jej zapíše. Denní sestavení by jen zvýšilo číslo VERSION_BUILD, zatímco vážnější vydání by překonalo jiná čísla.

Pokud to váš makefile uvádí na seznamu požadavků vašeho objektu, pak sestavení znovu zkompiluje, co potřebuje.


Kompilátory Intel Fortran a C++ to jistě umí, použijte -sox volba. Takže ano, existuje způsob. Nevím o žádné rozšířené konvenci pro vkládání takových informací do binárního souboru a já obecně používám Emacs v hexl-módu pro čtení vložených informací, což je docela hackerské.

'-sox' také vkládá možnosti kompilátoru používané k vytvoření spustitelného souboru, což je velmi užitečné.


Jedním ze způsobů, jak to udělat, pokud používáte cvs nebo subversion, je mít speciální id řetězec naformátovaný speciálně ve vašem zdrojovém souboru. Poté přidejte do cvs nebo svn háček před potvrzením, který aktualizuje tuto speciální proměnnou novou verzí souboru, když je změna potvrzena. Poté, když je binární soubor vytvořen, můžete použít ident k extrahování těchto informací. Například:

Přidejte do svého souboru cpp něco takového:

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

A spuštění ident (které můžete najít instalací rcs) v programu by mělo zobrazit informace o souborech, které mají v sobě řetězec id.

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

Poznámka Jak lidé uvedli v komentářích, tato technika je archaická. To, že systém správy zdrojového kódu automaticky mění váš zdrojový kód, je ošklivé a skutečnost, že se ovládání zdroje zlepšilo od dob, kdy bylo cvs jedinou možností, znamená, že můžete najít lepší způsob, jak dosáhnout stejných cílů.


Linux
  1. Jak zkontrolovat verzi OS a Linuxu

  2. Jak resetovat všechny předvolby Rhythmbox a informace o knihovně?

  3. Jak inicializovat sdílenou knihovnu v Linuxu

  1. `^m` A jak se toho zbavit?

  2. libstdc++.so.5:nelze otevřít soubor sdíleného objektu - ale knihovna je nainstalovaná a aktuální

  3. Vlákna a deskriptory souborů

  1. Jak zapsat soubor do jiného?

  2. Jak přihlásit každý příkaz zadaný do Bash a každou operaci se souborem?

  3. Upozornění libpng:Nekompatibilní verze libpng v aplikaci a knihovně