在源代码树中指定版本的最佳/正确做法是什么? 我想要的是,例如,将VERSION文件放在源树的顶层,并获取“版本”函数来读取它。
cabal文件中有一个版本部分。是否可以通过“帮助”或“版本”功能从我的源代码中读取它? 在一个地方指定版本并使其全局可用的正确做法是什么?
P.S。 Cabal库中是否有任何功能允许您从cabal文件中提取任何部分并将其显示在源代码中?然后我可以简单地从cabal文件中提取版本部分。
- 更新 -
感谢Thomas对Pathes_x模块的一些了解。 只是想补充一点,显然,我不需要在我的cabal文件中添加任何内容。一切都没有它。我需要的就是在你吸气的时候输入Pathes_X。 此外,我需要导入Data.Version以获取showVersion函数以正确格式化/打印Version数据类型。所以最后我得到这样的东西:
import Paths_kvman
import Data.Version
runVersion _ = putStrLn ("Version: " ++ (showVersion version))
现在,我需要的是更改cabal文件中的版本号,以便在我的源代码中传播它。正是我需要的。感谢。
答案 0 :(得分:22)
Cabal会自动为名为Paths_packagename
的每个包生成一个模块。只需导入此包并查看它导出的version
值。
编辑:例如:
module Data.Blah where
import Paths_t
func :: IO ()
func = print version
示例运行:
> func
Version {versionBranch = [0,1], versionTags = []}
请务必将Paths_packagename
放入cabal文件的Other-Modules
部分。
答案 1 :(得分:1)
最佳做法是将版本号放在cabal文件中,正如您已经注意到的那样。
我不知道您可以通过哪些良好做法来维护关于版本的单一事实,但是可以将数字提供给cabal和您的应用程序。
我会在具有以下内容的来源中推荐单个文件Version.hs
:
module Version
where
version :: String
version = "3.14159"
如果你愿意的话,你可以使用某种脚本用这个号码来更新cabal文件,但是我不知道如何从cabal本身做到这一点。
此策略仅适用于应用程序包;如果您正在构建一个库,那么您需要考虑一下Version.hs
将要进入的分层模块的命名空间。
总的来说,我怀疑这场比赛是不值得的。
P.S。版本号应该是不可变的,因此您需要一个值,而不是一个函数。