Разница в поведении программы с разными файлами make

У меня есть эта программа 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

который производит складку, которая на моей машине висит без вывода. Единственное различие между ними состоит в том, что один из них помещает свой вывод в сгиб, а другой помещает его в a.out. Номера версий для моего ocaml, ocamlc, ocamlopt и ocamlfind - все 4.02.1 и opam show core говорит, что это версия 112.06.01. Кто-нибудь из вас, ребята, знает, что вызывает разницу?

1 ответ

Решение

Вы запускаете стандартную программу сгиба. Попробуй./fold.

Другие вопросы по тегам