开发者

OCaml shebang syntax error

开发者 https://www.devze.com 2023-04-09 16:06 出处:网络
$ cat hello.ml #!/usr/bin/env ocamlrun ocaml let rec main = print_string \"Hello World!\\n\" $ ./hello.ml
$ 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

Similar to Erlang, OCaml permits shebangs in scripted mode, but borks in compiled mode. Is there a more idiomatic shebang in OCaml, one that doesn't trigger a syn开发者_运维技巧tax error during compilation?


There is not a directive that I know of which works with both the toplevel and the OCaml compilers, but you can use ocamlscript as an in-between option.

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

ocamlscript uses ocamlfind + ocamlopt in the background to (re-)compile your code when it is executed. With ocamlscript installed, you can use:

#!/usr/bin/env ocamlscript

It does not give you direct toplevel compatibility, but it allows you to avoid a separate compilation step with many programs. The web site has decent documentation and examples.


Just use sed as a preprocessor. To remove the shebang on the first line, if found, pass:

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

to ocamlc or ocamlopt.

0

精彩评论

暂无评论...
验证码 换一张
取 消