【发布时间】:2013-07-22 20:10:43
【问题描述】:
我以为已经有关于这个的问题了,但我找不到。
我希望我的程序打印出它的编译日期。最简单的设置方法是什么?
我能想到几种可能性,但没有一种是你所说的“简单”。理想情况下,我希望能够只执行 ghc --make Foo 并让 Foo 在每次运行时打印出编译日期。
浮现在脑海中的各种不容易的可能性:
-
学习模板 Haskell。弄清楚如何使用
Data.Time来获取今天的日期。找到一种方法如何将其转换为字符串。 (现在我的程序需要 TH 才能工作。我还需要说服它每次都重新编译那个模块,否则我会得到那个模块的编译日期[永远不会改变]而不是整个程序。) 编写一个 shell 脚本,生成一个包含系统日期的小 Haskell 模块。 (现在我必须使用那个 shell 脚本,而不是直接编译我的程序。此外,Windows 上的 shell 脚本还有很多不足之处!)
坐下来写一些 Haskell 代码,它会生成一个包含日期的小 Haskell 模块。 (比以前的想法更便携 - 但仍需要额外的构建步骤,否则打印的日期将不正确。)
可能有一些方法可以通过 Cabal 来做到这一点 - 但我真的想打包这个小程序只是为了获得约会工具吗?
有人有更简单的建议吗?
【问题讨论】:
-
将 ghc 别名为等同于
ghc -DNOW="\"`date`\""的东西(不知道 Windows shell 的外观如何),并在您的模块中使用{-# LANGUAGE CPP #-}和now = NOW作为日期字符串。丑陋的 hack,可能只是丑陋到足以将您推向需要更多工作的更清洁的替代方案。 -
@DanielFischer 显然 Windows shell 缺乏从命令输出设置变量的任何功能。相反,您必须使用涉及
SET /P VAR=的hack,它从stdin 读取文本。如果您将命令输出通过管道传输到文件,然后将其重新输入,您可以达到您想要的效果......但是耶稣! >_ -
哦,哇。甚至 PowerShell 都没有这种能力吗?
-
@DanielFischer PowerShell 可能,是的。但是我没有安装那个。编写一个很小的 Haskell 脚本来生成必要的输出似乎更容易。
-
是的。那么这似乎容易多了。