Sof*_*mur 2 ocaml makefile runtime compilation
我有一个.ml
在我的定义中编译的列表makefile
,完成后main/mail.ml
.
我failwith "to do"
在这些文件中有一些函数体.之前,我记得它只在运行时执行需要该函数时引发错误.
今天我所有的编译.ml
工作正常:.cmi
,cmx
并且.o
都产生.但是,当我启动主要的二进制文件,它似乎并没有先运行是什么let ()
的main.ml
,相反,它似乎检查首先列表的文件.ml
中makefile
,并提出Fatal error: exception Failure("to do") make: *** [all] Error 2
当遇到第一个faiwith "to do"
.
我发现这种行为很奇怪,谁能告诉我可能是什么原因?我makefile
或者有什么问题main.ml
?
failwith
仍然被允许!但这有时也会发生在我身上.
通常问题是,不是使功能值失败,而是使非功能值失败,这意味着failwith
实际上在模块初始化期间执行.所以很可能你的代码中的某处写了:
let f = failwith "TODO"
Run Code Online (Sandbox Code Playgroud)
failwith
在模块初始化时执行的地方而不是:
let f x = failwith "TODO"
Run Code Online (Sandbox Code Playgroud)
其中,failwith
被当函数执行f
实际上是用参数来调用.