有没有办法在包的源代码中获得Cabal包的版本?

Mar*_*ark 13 haskell cabal

假设我有一个控制台程序,可以选择显示其版本.目前每当我更新.cabal文件中的版本时,我都需要转到源代码并更新常量 - 当前版本号的字符串表示.这感觉不符合DRY原则,现在我想知道,是否有可能.cabal从源代码中获取文件中定义的项目版本 ?也许Cabal定义了一些CPP宏或其他东西?

Mar*_*ark 10

事实上,Cabal允许从.cabal程序中的文件中访问信息.根据Cabal文档,您可以导入在构建包期间存在的特殊模块,如下所示:

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

myVersion :: String
myVersion = showVersion version
Run Code Online (Sandbox Code Playgroud)

该模块Paths_packagename提供version类型 版本.

  • 这仍然是目前最好的方法吗? (2认同)
  • 一个小注意事项:将 `<packagename>` 更改为您的真实包名称。例如,如果你的包名称是“my-awesome-package”,你应该“import Paths_my_awesome_package” (2认同)