2010-05-23 11 views
57

Vorrei che il mio programma cabalised avesse uno switch --version.Come può il mio programma Haskell o libreria trovare il suo numero di versione?

Vorrei che segnalasse la stessa versione presente nel file .cabal.

Se devo aggiornare separatamente il numero di versione nel mio codice sorgente Haskell e nel file .cabal, alla fine li rimuoverò.

Quindi, come può il mio programma, mentre viene compilato in cabal, ottenere il suo numero di versione dal file .cabal?

risposta

76

Questo è ben supportato con Cabal. Come segue (da xmonad):

Import Paths_$myprogram - un file Cabal crea con un sacco di metadati dal file .cabal, insieme a un modulo per la movimentazione numeri di versione:

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

Aggiungi un comunicato stampa stampare il campo 'versione' fornita da Paths_$myprogram:

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

in generale, il file percorsi generati del Cabal contiene i seguenti valori, in dist/build/autogen/

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

5 anni dopo questa risposta, vale la pena ricordare che questo funziona altrettanto bene con il nuovo strumento di compilazione di Stack. L'unica differenza è che il file Paths si trova in una posizione come '.stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/autogen /' (la parte 'x86_64-osx' cambia secondo la tua architettura) . –

+2

Ricorda di mettere 'Paths_ $ myprogram' negli" altri-moduli "nel tuo .cabal per evitare" ld restituito 1 exit status " – Sophie

Problemi correlati