2010-05-23 8 views
57

Me gustaría que mi programa cabalizado tenga un interruptor --version.¿Cómo puede mi programa Haskell o biblioteca encontrar su número de versión?

Me gustaría informar la misma versión que está presente en el archivo .cabal.

Si tengo que actualizar el número de versión por separado en mi código fuente de Haskell, así como en el archivo .cabal, eventualmente los eliminaré de sincronización.

Entonces, ¿cómo puede mi programa, mientras se compila en cabal, obtener su número de versión del archivo .cabal?

Respuesta

76

Esto es bien compatible con Cabal. De la siguiente manera (de xmonad):

importación Paths_$myprogram - Cabal un archivo crea con una gran cantidad de metadatos del archivo .cabal, junto con un módulo para el manejo de los números de versión:

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

Añadir a una sentencia print imprimir el campo 'versión' proporcionado por Paths_$myprogram:

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

en general, los archivos generados Caminos de Cabal contiene los siguientes valores, en dist/build/autogen/

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

5 años después de esta respuesta, vale la pena mencionar que esto funciona igual de bien con la nueva herramienta de compilación Stack. La única diferencia es que el archivo Paths está en una ubicación como '.stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/autogen /' (la parte 'x86_64-osx' cambia según su arquitectura) . –

+2

Recuerde poner 'Paths_ $ myprogram' en los" otros módulos "en su .cabal para evitar" ld returned 1 exit status " – Sophie

Cuestiones relacionadas