我在哪里可以找到(和 运行)用 cabal 沙箱编译的可执行文件?
Where do I find (and run) an executable compiled with a cabal sandbox?
我正在使用 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 并在那里手动安装依赖项。)
这实际上看起来不像是 cabal exec
的问题,事实并非如此!
我的历史
在开始使用 cabal 沙箱的同时,我在源文件中明确地为我的模块指定了一个自定义名称 (myProgram.lhs
)。在这种情况下,仅 ghc
(没有 cabal exec
)也不会生成可执行文件,如 Cabal output is redirected but not generated 中的回答。 (我根本无法测试裸 ghc
命令,因为我在沙箱中有依赖项,所以我的模块无法编译。)
说明
引用自that Q&A的解释:
I get the warning
output was redirected with -o, but no output will be generated because there is no main module.
A quote from The Haskell 98 Report:
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
我正在使用 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 并在那里手动安装依赖项。)
这实际上看起来不像是 cabal exec
的问题,事实并非如此!
我的历史
在开始使用 cabal 沙箱的同时,我在源文件中明确地为我的模块指定了一个自定义名称 (myProgram.lhs
)。在这种情况下,仅 ghc
(没有 cabal exec
)也不会生成可执行文件,如 Cabal output is redirected but not generated 中的回答。 (我根本无法测试裸 ghc
命令,因为我在沙箱中有依赖项,所以我的模块无法编译。)
说明
引用自that Q&A的解释:
I get the warning
output was redirected with -o, but no output will be generated because there is no main module.
A quote from The Haskell 98 Report:
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