我一直在处理一个小文件,我一直在编译和运行它。我的目录包含Log.hs和LogAnalysis.hs.
LogAnalysis.hs 看起来像这样:
{-# OPTIONS_GHC -Wall #-}
module LogAnalysis where
import Log
parseMessage :: String -> LogMessage
--some code...
main :: IO ()
main = do
putStrLn (show (parseMessage ("Some log message text")))
Run Code Online (Sandbox Code Playgroud)
当我LogAnalysis.hs用 GHC编译时,我得到了一个可执行文件,以及其他一些二进制文件:
$ ll
Log.hi
Log.hs
Log.o
LogAnalysis <-- this is the executable which has disappeared
LogAnalysis.hi
LogAnalysis.hs
LogAnalysis.o
Run Code Online (Sandbox Code Playgroud)
我做了一些小改动,现在当我运行时,ghc LogAnalysis.hs我只得到.hi和.o文件,但没有可执行文件。输出是:
[1 of 2] Compiling Log ( Log.hs, Log.o )
[2 of 2] Compiling LogAnalysis ( LogAnalysis.hs, LogAnalysis.o )
Run Code Online (Sandbox Code Playgroud)
我什至不确定我改变了什么,但这没什么大不了的。知道是什么触发了这个吗?有没有办法强制 GHC 生成可执行文件?
规格:GHC 8.8.3,macOS 10.15.5
由于我将文件声明为未命名的模块Main,因此默认情况下 GHC 不会创建可执行文件。为了将此模块编译为可执行文件,我们可以使用 GHC 的main-is标志。(感谢克兰茨评价和威廉·Onsem的答案在这里的这个。)因此,与编译
ghc -main-is LogAnalysis LogAnalysis.hs
Run Code Online (Sandbox Code Playgroud)
给出输出
[2 of 2] Compiling LogAnalysis ( LogAnalysis.hs, LogAnalysis.o )
Linking LogAnalysis ...
Run Code Online (Sandbox Code Playgroud)
因此 GHC 已链接LogAnalysis了所需结果的可执行文件。
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |