Как моя программа или библиотека на Haskell может найти номер своей версии? - PullRequest
59 голосов
/ 23 мая 2010

Я бы хотел, чтобы в моей программе на кабеле был переключатель --version.

Я бы хотел сообщить о той же версии, что и в файле .cabal.

Если мне придется обновлять номер версии отдельно в моем исходном коде на Haskell, а также в файле .cabal, я в итоге получу их несинхронизированными.

Итак, как моя программа, будучи скомпилированной в cabal, может получить номер своей версии из файла .cabal?

1 Ответ

82 голосов
/ 23 мая 2010

Это хорошо поддерживается Cabal. Как следует (из xmonad):

Импорт Paths_$myprogram - файл, создаваемый Cabal с большим количеством метаданных из файла .cabal, а также с модулем для обработки номеров версий:

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

Добавить оператор печати для печати поля 'version', предоставленного Paths_$myprogram:

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

Как правило, созданный Cabal файл Paths содержит следующие значения: dist/build/autogen/

version,
getBinDir, getLibDir, getDataDir, getLibexecDir,
getDataFileName
...