2010-05-23 10 views
57

Ich möchte, dass mein cabalised Programm einen --version Schalter hat.Wie kann mein Haskell Programm oder meine Bibliothek die Versionsnummer finden?

Ich möchte, dass es die gleiche Version wie in der .cabal-Datei vorhanden meldet.

Wenn ich die Versionsnummer separat in meinem Haskell-Quellcode sowie in der .cabal-Datei aktualisieren muss, werde ich sie schließlich nicht mehr synchronisieren.

Also, wie kann mein Programm, während es unter cabal kompiliert wird, seine Versionsnummer aus der .cabal-Datei bekommen?

Antwort

76

Dies wird mit Cabal gut unterstützt. Wie folgt (von xmonad):

Import Paths_$myprogram - eine Datei Cabal erstellt mit vielen Metadaten aus der .cabal Datei zusammen mit einem das Modul für den Umgang mit Versionsnummern:

import Paths_xmonad (version) 
import Data.Version (showVersion) 

eine print-Anweisung hinzufügen drucken Sie die 'Version' Feld zur Verfügung gestellt von Paths_$myprogram:

case args of 
    ["--version"] -> putStrLn ("xmonad " ++ showVersion version) 

im allgemeinen Cabal erzeugten Pfade Datei enthält die folgenden Werte, in dist/build/autogen/

version, 
getBinDir, getLibDir, getDataDir, getLibexecDir, 
getDataFileName 
+7

5 Jahre nach dieser Antwort ist es erwähnenswert, dass dies unter dem neuen Stack-Build-Tool genauso gut funktioniert. Der einzige Unterschied ist, dass sich die Pfaddatei an einem Ort wie '.stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/autogen /' befindet (der 'x86_64-osx' Teil ändert sich entsprechend Ihrer Architektur) . –

+2

Denken Sie daran, 'Paths_ $ myprogram' in die" anderen-Module "in Ihrem .cabal zu setzen, um zu vermeiden, dass" ld returned 1 exit status "zurückgegeben wurde. – Sophie