【问题标题】:Where do I find (and run) an executable compiled with a cabal sandbox?我在哪里可以找到(并运行)使用 cabal 沙箱编译的可执行文件?
【发布时间】:2015-02-13 14:49:57
【问题描述】:

我正在使用 cabal 沙箱(使用 cabal sandbox init 设置)编译我的 myProgram.lhs。我正在使用我想出的最简单的方法:

cabal exec -- ghc myProgram

或(在Makefile 中有一条规则)

cabal exec -- make myProgram

之后,在我的源目录中,出现myProgram.o,但不是可执行文件myProgram

如何运行生成的程序?

cabal exec -- ./myProgram

没用。

现在,我想出了一个最简单的方法来测试它:

cabal exec -- runghc myProgram.lhs

但我不喜欢这样。

你知道生成的可执行文件在哪里吗?

(我还没有为我的项目创建任何 cabal 文件。我只是用裸 ghc 编译程序并测试它,然后 - 当我需要自定义依赖项时 - 我设置了 cabal sanbox 并在那里手动安装依赖项。)

【问题讨论】:

  • 您签到了吗dist/。我只是猜测,因为我不知道你的阴谋集团文件中有什么。如果你做了cabal install,那么你的可执行文件应该在.cabal-sandbox/bin的某个地方。
  • @JuanPablo 不,我的情况“更简单”:因为我只是使用沙箱作为环境来编译它(运行 ghc 和所有需要的包版本,手动安装),但我还没有为我的程序编写一个阴谋集团规范。所以,基本上,如果我不需要使用过的包的特定版本,我只需运行ghc 来获取可执行文件。但是因为我需要特定的包版本(与我的主系统不兼容),所以我设置了一个 cabal 沙箱(只是在里面运行 ghc)。所以,cabal 对我的可执行文件一无所知。
  • 这些命令的输出是什么?
  • @JustinWood 感谢您提供帮助。实际上,这个问题根本与 cabal 沙箱无关,裸 ghc 也是如此,并且源于我的注意力不集中:我只是在源代码中明确地为我的模块命名(同时我开始使用cabal 沙箱),如果名称不是 Main,ghc 不会生成可执行文件。很简单!喜欢在这里回答:stackoverflow.com/a/12133749/94687

标签: haskell testing compilation executable cabal


【解决方案1】:

这看起来不像是cabal exec 的问题,其实不是!

我的历史

在开始使用 cabal 沙箱的同时,我在源文件 (myProgram.lhs) 中明确地为我的模块指定了一个自定义名称。在这种情况下,正如Cabal output is redirected but not generated 中所回答的那样,仅仅一个裸露的ghc(没有cabal exec)也不会生成可执行文件。 (我根本无法测试裸露的ghc 命令,因为我在沙箱中有依赖项,所以我的模块无法编译。)

说明

引用自that Q&A的解释:

我收到警告

output was redirected with -o, but no output will be generated because there is no main module.

引用 Haskell 98 报告:

A Haskell program is a collection of modules, one of which, by convention, must be called Main and must export the value main.

解决办法

解决方案是将-main-is MyProgram.main 添加到 ghc opts。然后它会生成可执行文件。

./myProgram 现在只是出现在我的源目录中,无论我是否调用

ghc -main-is MyProgram.main myProgram

cabal exec -- ghc -main-is MyProgram.main myProgram

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多