我在哪里可以找到(并运行)使用 cabal 沙箱编译的可执行文件?

2024-01-07

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

cabal exec -- ghc myProgram

或者(有一个规则Makefile)

cabal exec -- make myProgram

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

我如何运行生成的程序?

cabal exec -- ./myProgram

不起作用。

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

cabal exec -- runghc myProgram.lhs

但我不喜欢这个。

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

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


这实际上看起来不像是一个问题cabal exec,但事实并非如此!

我的历史

在开始使用 cabal 沙箱的同时,我在源文件中明确为我的模块指定了一个自定义名称(myProgram.lhs)。在这种情况下只是一个裸露的ghc(没有cabal exec)也不会生成可执行文件,如中所回答Cabal 输出被重定向但未生成 https://stackoverflow.com/a/12133749/94687。 (我根本无法测试裸露的ghc命令,因为我在沙箱中有依赖项,所以我的模块无法编译。)

解释

解释引用自那个问答 https://stackoverflow.com/a/12133749/94687:

我收到警告

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 选择。然后它生成可执行文件。

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

ghc -main-is MyProgram.main myProgram

or

cabal exec -- ghc -main-is MyProgram.main myProgram
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我在哪里可以找到(并运行)使用 cabal 沙箱编译的可执行文件? 的相关文章

  • 由于垃圾收集,Haskell 程序中会出现多长时间的暂停?

    关于我的另一个问题Haskell 集合可以保证每个操作的最坏情况范围 https stackoverflow com q 12393104 1333025 我很好奇 垃圾收集会导致多长时间的暂停 Haskell 是否使用某种增量垃圾收集 以
  • Xcode 5:单元测试未运行

    我创建了一些测试用例 它们都通过了 那是因为它们没有被运行 从 Xcode 中 我得到 Test Suite All tests started at Test Suite All tests finished at Executed 0
  • 读取ELF二进制的plt部分并打印函数虚拟地址

    我想读取 ELF 二进制文件的 plt 部分并获取外部函数的所有虚拟地址 Disassembly of section plt 0000000000400400
  • 检索 Haskell 项目中所有导入的列表

    因此 我的最终目标是通过确保项目导入的所有实体都存在于其声称可以使用的版本中 来评估 cabal 文件中依赖项的准确性 一个好的开始是找到单个源文件使用的所有导入实体的列表 可选地包含有关它们来自何处的信息 我愿意暂时忽略类实例的情况 因为
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal
  • 这个实例有什么问题:ArrowApply Automaton?

    我希望 Automaton 有实例 ArrowApply 但 Control Arrow Transformer Automaton 没有 我认为下面的代码会表现良好 data Automaton b c Auto runAuto b gt
  • 根据环境执行特定的Geb测试

    我正在 Grails 项目中执行一组规范测试 当我在本地时 我需要执行一组特定的规范 当我运行预生产环境时 我需要执行另一组规范 我当前的配置正在同时执行两个环境的所有规范 这是我想避免的 我有多个环境 已在 GebConfig 中配置 e
  • 如何测试自定义 StateT 的 Monad 实例?

    我正在学习 Monad Transformers 其中一个练习要求实现 Monad 实例StateT 我想使用以下方法测试我的实现是否符合 Monad 法则validity https github com NorfairKing vali
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • Cabal 无法安装依赖项,但如果直接询问可以安装它们

    我发现 Cabal 反复出现一个非常奇怪的问题 它影响了我获得可重复的 Haskell 构建的能力 我有一个带有沙箱的阴谋集团项目 如果我做cabal install 我收到以下形式的错误 Y failed during the build
  • 使用 NUnit 或 XUnit 时如何将参数传递给 dotnet test 命令

    我正在使用 C 和 NET Core Selenium 和 NUnit 开发一些端到端测试 现在我想写一个登录测试用例 我的测试是从控制台开始的 只需使用dotnet test命令 我只想将用户名和密码传递给此命令并在我的测试中获取它们 我
  • Junit Mockito 测试一切

    我现在正在寻找更多时间但没有结果 请帮忙 这是我要测试的课程 public class DBSelectSchema extends Database private static final Logger LOG Logger getLo
  • 使用 jar 依赖项构建 Android 库项目

    我已经被一个问题困扰了几天 但我不知道如何解决这个问题 我正在处理一个 Android 库项目 该项目正在使用 android sdk 提供的 Android 工具进行编译 在项目内部 我遵循 Android 项目的标准结构 我的 jar
  • 为什么 cmake 在 git commit 后编译所有内容

    假设我有时在 Linux 上使用 cmake 2 8 编译一段代码 我更改了一个文件 my changed file 运行 cmake 并且只构建了这个文件 到目前为止 一切都很好 现在我想提交这个 git add my changed f
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • 将“Functor”类泛化为“MultiFunctor”?

    我正在学习 自由应用函子 https arxiv org pdf 1403 0749 pdf 当然 我要问的问题有点偏离论文的主要思想 但仍然 第 6 页试图概括Functor to MultiFunctor class Functor f
  • Espresso - 检查使用按钮按下意图打开哪个活动?

    是否可以跟踪按下某个按钮后打开了哪个 Activity 我有一个测试 其中当单击 按下按钮时 it 向服务器发送请求 直到发送请求时 它打开一个活动 验证是否执行成功在测试中 我需要检查打开的 Activity 是什么 我的测试示例 检查
  • seq在haskell中代表什么

    我是 Haskell 的新手 刚刚进入惰性世界编程 我读到seq函数非常特殊 因为它强制使用严格的评估 以便在某些情况下更加有效 但我就是找不到什么seq代表字面意思 也许严格评估Q 它应该提醒您 顺序 或 顺序 因为它允许程序员指定其参数
  • 不理解 Monoid 定义中态射的表示法

    我试图理解什么Monoid是从范畴论的角度来看的 但我对用来描述它的符号有点困惑 这是维基百科 在范畴论中 幺半群范畴 C I 中的幺半群 或幺半群对象 M 是一个对象 M 和两个态射 M M M 称为乘法 I M 称为单位 我的困惑在于态
  • 浏览前奏的源代码会带来奇怪的情况

    我一直在寻找的定义seq并遇到了这个奇怪的事情 为什么所有这些函数都有相同 相似的定义 seq a gt b gt b seq let x x in x inline a gt a inline let x x in x lazy a gt

随机推荐