3
$ cat hello.ml 
#!/usr/bin/env ocamlrun ocaml

let rec main = print_string "Hello World!\n"

$ ./hello.ml 
Hello World!

$ ocaml hello.ml 
Hello World!

$ ocamlc -o hello hello.ml 
File "hello.ml", line 1, characters 0-1:
Error: Syntax error

$ ocamlopt -o hello hello.ml 
File "hello.ml", line 1, characters 0-1:
Error: Syntax error

与 Erlang 类似,OCaml 允许在脚本模式下使用 shebangs,但在编译模式下会失败。OCaml 中是否有更惯用的 shebang,在编译期间不会触发语法错误?

4

2 回答 2

3

我知道没有一个指令可以同时用于顶级编译器和 OCaml 编译器,但您可以使用 ocamlscript 作为中间选项。

http://martin.jambon.free.fr/ocamlscript.html

ocamlscript 在后台使用 ocamlfind + ocamlopt 在执行时(重新)编译您的代码。安装 ocamlscript 后,您可以使用:

#!/usr/bin/env ocamlscript

它不会为您提供直接的顶级兼容性,但它允许您避免对许多程序进行单独的编译步骤。该网站有不错的文档和示例。

于 2011-09-29T18:41:15.540 回答
2

只需sed用作预处理器。要删除第一行的 shebang,如果找到,请通过:

-pp 'sed "1 s/^#\!.*$//"'

ocamlcocamlopt

于 2011-09-30T22:15:11.903 回答