2010-05-23 65 views
57

我想我的cabalised程序有一个--version开关。我的Haskell程序或库如何找到它的版本号?

我想报告与.cabal文件中存在的版本相同的版本。

如果我必须分别更新我的Haskell源代码以及.cabal文件中的版本号,我最终会让它们不同步。

那么,我的程序在cabal下编译时,如何从.cabal文件中获取其版本号?

回答

76

这得到了Cabal的很好的支持。由于(从xmonad)如下:

导入Paths_$myprogram - 文件惊天动地有大量的元数据从.cabal文件创建,以沿处理版本号的模块:

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

添加一个print语句打印由Paths_$myprogram提供的“版本”字段:

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

一般来说,惊天动地的生成路径文件包含以下值,在dist/build/autogen/

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

在回答5年之后,值得一提的是,这种方法在新的Stack构建工具下也能正常工作。唯一的区别是Paths文件位于'.stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/autogen /'位置(根据您的体系结构,“x86_64-osx”部分会发生变化) 。 – 2016-01-01 00:04:39

+2

请记住将'Paths_ $ myprogram'放入.cabal中的“其他模块”以避免“ld返回1退出状态” – Sophie 2016-09-27 19:20:14

相关问题