我正在编译我的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(使用前将#替换为@)