不同 make 文件的程序行为差异
Difference in program behavior with different make files
我有这个 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。你们有谁知道造成这种差异的原因吗?
你是运行标准折叠程序。尝试./fold。
我有这个 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。你们有谁知道造成这种差异的原因吗?
你是运行标准折叠程序。尝试./fold。