I'm compiling my myProgram.lhs
with the use of a cabal sandbox (set up with cabal sandbox init
). I'm using a simplest approach I've come up with:
cabal exec -- ghc myProgram
or (having a rule in Makefile
)
cabal exec -- make myProgram
After that, in my source directory, appears myProgram.o
, but not the executable myProgram
.
How do I run the resulting program?
cabal exec -- ./myProgram
doesn't work.
Now, I've come up with a simplest approach to test it:
cabal exec -- runghc myProgram.lhs
but I don't like this.
Do you know where the resulting executable is?
(I haven't created any cabal file for my project yet. I simply used to compile the program with bare ghc
and test it, then--when I needed custom dependencies--I set up the cabal sanbox and installed the dependencies manually there.)
This didn't actually look like a problem of
cabal exec
, and it wasn't!My history
Simultaneously with starting to use the cabal sandbox, I explicitly gave a custom name to my module in the source file (
myProgram.lhs
). And in such case just a bareghc
(withoutcabal exec
) wouldn't generate the executable, too, as answered in Cabal output is redirected but not generated. (I simply couldn't test the bareghc
command, because I had the dependencies in the sandbox, so my module wouldn't compile.)Explanation
Explanation quoted from that Q&A:
The solution
A solution is to add
-main-is MyProgram.main
to ghc opts. Then it generates the executable../myProgram
simply appears in my source directory now, no matter whether I callor