2010-05-23 16 views
57

Je voudrais que mon programme cabalisé ait un commutateur --version.Comment mon programme ou ma bibliothèque Haskell peut-il trouver son numéro de version?

Je voudrais signaler à la même version que est présente dans le fichier .cabal.

Si je dois mettre à jour le numéro de version séparément dans mon code source Haskell ainsi que dans le fichier .cabal, je vais finir par les faire sortir de la synchronisation.

Alors, comment mon programme, tout en étant compilé sous la cabale, obtenir son numéro de version du fichier .cabal?

Répondre

76

Ceci est bien pris en charge avec Cabal. Comme suit (de xmonad):

Importation Paths_$myprogram - un Cabal de fichier crée avec beaucoup de métadonnées à partir du fichier .cabal, ainsi que d'un module de traitement des numéros de version:

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

Ajoutez une instruction d'impression imprimer le champ « version » fournie par Paths_$myprogram:

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

en général, le fichier des chemins générés de Cabal contient les valeurs suivantes, dans dist/build/autogen/

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

5 ans après cette réponse, il convient de mentionner que cela fonctionne aussi bien sous le nouvel outil de construction de la pile. La seule différence est que le fichier Paths se trouve dans un emplacement tel que '.stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/autogen /' (la partie 'x86_64-osx' change en fonction de votre architecture) . –

+2

N'oubliez pas de mettre 'Paths_ $ myprogram' dans les" autres-modules "dans votre fichier .cabal pour éviter que" ld ne retourne 1 statut de sortie " – Sophie