$ 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,但在编译模式下borks。在OCaml中是否有一个更惯用的shebang,在编译期间不会触发语法错误?
答案 0 :(得分:3)
我不知道哪个指令适用于toplevel和OCaml编译器,但您可以使用ocamlscript作为中间选项。
http://martin.jambon.free.fr/ocamlscript.html
ocamlscript在后台使用ocamlfind + ocamlopt在执行代码时(重新)编译代码。安装ocamlscript后,您可以使用:
#!/usr/bin/env ocamlscript
它不会为您提供直接的顶级兼容性,但它允许您避免使用许多程序进行单独的编译步骤。该网站提供了不错的文档和示例。
答案 1 :(得分:1)
只需使用sed
作为预处理程序。要删除第一行上的shebang,如果找到,请传递:
-pp 'sed "1 s/^#\!.*$//"'
到ocamlc
或ocamlopt
。