我希望我的 cabal 包含一个 --version
开关。
我希望它能够报告与 .cabal 文件中相同的版本号。
如果我必须分别在 Haskell 源代码以及 .cabal 文件中更新版本号,最终它们将会不同步。
那么,在使用 cabal 编译时,我的程序如何才能从 .cabal 文件获取其版本号呢?
这在 Cabal 中得到了很好的支持。如下所示(来自 xmonad):
导入 Paths_$myprogram
- 这是 Cabal 根据 .cabal 文件创建的包含大量元数据的文件,还包括处理版本号的模块:
import Paths_xmonad (version)
import Data.Version (showVersion)
在 Paths_$myprogram
提供的 'version' 字段中添加一个打印语句:case args of
["--version"] -> putStrLn ("xmonad " ++ showVersion version)
通常情况下,Cabal生成的Paths文件包含以下值,位于dist/build/autogen/
目录中。
version,
getBinDir, getLibDir, getDataDir, getLibexecDir,
getDataFileName
.stack-work/dist/x86_64-osx/Cabal-1.22.4.0/build/autogen/
这样的位置(x86_64-osx
部分会根据你的架构而变化)。 - Luis CasillasPaths_$myprogram
放入您的 .cabal 文件中的 "other-modules" 中,以避免出现 "ld returned 1 exit status" 的错误。 - SophiePaths_$myprogram
中,您包名称中的任何“-”都必须替换为“_”。 - orome