2011-09-29 38 views
2
$ 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,在编译期间不会触发语法错误?OCaml shebang语法错误

回答

1

只需使用sed作为预处理器即可。以除去在第一行的认领,如果发现,通过:

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

ocamlcocamlopt

+0

谢谢。我不想要求OCaml用户使用特殊的编译标志来处理shebang行,但我很高兴你能使用它。 – mcandre

+0

编译器自动剥离shebang会很酷。也许是提升的要求。 – 2011-10-02 12:42:12

+0

你可以问他们吗?你知道的更多,所以他们更可能会听你的。 – mcandre

3

我不知道哪个指令可以同时用于顶层和OCaml编译器,但是您可以使用ocamlscript作为中间选项。

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

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

#!/usr/bin/env ocamlscript 

它不给你直接的顶级兼容性,但它可以让你避免了许多程序的单独的编译步骤。该网站有不错的文档和示例。

+0

Bah,ocamlscript无法在Mac OS X中编译。错误:无法找到ocamlfind。 – mcandre

+1

您是否安装了ocamlfind?它是ocamlscript所必需的。 – hcarty

+0

请确定你有ocamlfind,这对于OCaml是非常标准的,你应该始终拥有。我一直在Mac上使用ocamlscript,没有任何问题。 –