Please can someone explain in simple terms how to build C code with ocamlbuild. The example at the wiki has more going on than I can understand. Here's a simple test program: ---- avg.c --- #include #include #include #include double avg(double *v, int N) { int i; double sum = 0.0; for (i = 0; i < N; ++i) { sum += v[i]; } double ans = sum/N; return ans; } value avg_c(value v) { CAMLparam1(v); double ans = avg((double *) v, Wosize_val(v)/Double_wosize); CAMLreturn(caml_copy_double(ans)); } --- math.mli --- val avg : float array -> float --- math.ml --- external avg : float array -> float = "avg_c" --- run.ml --- print_float (Math.avg [|1.0; 1.5|]);; print_newline() Command line instructions for producing byte and native code are as follows. I would like to please know how to get ocamlbuild to do this. Byte code: % cc -c -I /usr/local/lib/ocaml/ avg.c % ocamlc -c math.mli % ocamlc -c math.ml % ocamlc -custom -o run.byte avg.o math.cmo run.ml % run.byte 1.25 Native code: % cc -c -I /usr/local/lib/ocaml/ avg.c % ocamlopt -c math.mli % ocamlopt -c math.ml % ocamlopt -o run.native avg.o math.cmx run.ml % run.native 1.25