使用不同make文件的程序行为差异

时间:2015-04-01 07:52:54

标签: ocaml ocamlfind

我有这个OCaml程序

open Core.Std;;
open Printf;;

let all l = List.fold ~f:(&&) ~init:true l;;

let any l = List.fold ~f:(||) ~init:false l;;

let main () = let bools = [true; false; true; true; false; true] in
  printf "%b %b\n" (all bools) (any bools);;
main();;

然后是两个make文件,第一个是

all: a.out
    @true

a.out: fold.cmx
    ocamlfind ocamlopt -g -linkpkg -package core -package core_kernel -thread -w -10 fold.cmx

fold.cmx: fold.ml fold.cmi
    ocamlfind ocamlopt -g -c fold.cmx -package core -package core_kernel -thread -w -10 fold.ml

fold.cmi: fold.mli
    ocamlfind ocamlopt -g -c -package core -package core_kernel -thread -w -10 fold.mli

fold.mli: fold.ml
    ocamlfind ocamlc -i -package core -package core_kernel -thread -w -10 fold.ml > fold.mli

clean:
    @rm *.cmx *.cmi *.o tests 2>/dev/null || true

产生一个a.out,它给出false true的预期输出。 第二个是

all: fold
    @true

fold: fold.cmx
    ocamlfind ocamlopt -g -o fold -linkpkg -package core -package core_kernel -thread -w -10 fold.cmx

fold.cmx: fold.ml fold.cmi
    ocamlfind ocamlopt -g -c fold.cmx -package core -package core_kernel -thread -w -10 fold.ml

fold.cmi: fold.mli
    ocamlfind ocamlopt -g -c -package core -package core_kernel -thread -w -10 fold.mli

fold.mli: fold.ml
    ocamlfind ocamlc -i -package core -package core_kernel -thread -w -10 fold.ml > fold.mli

clean:
    @rm *.cmx *.cmi *.o tests 2>/dev/null || true

会产生我机器上的折叠,挂起而没有输出。两者之间的唯一区别是,其中一个将其输出放在fold中,另一个放在a.out中。我的ocaml,ocamlc,ocamlopt和ocamlfind的版本号都是4.02.1,opam show core表示版本号为112.06.01。你们中的任何人都知道造成这种差异的原因是什么?

1 个答案:

答案 0 :(得分:4)

您正在运行标准折叠程序。试试./fold。