Как передать флаг -S в ocamlopt с помощью ocamlbuild?

Я хотел бы передать флаг -S в ocamlopt при сборке с помощью команд ocamlbuild и corebuild.

Я понимаю, что выполнение ocamlbuild -cflag -S ... не сработает, поскольку флаг -S существует только для ocamlopt, а не для ocamlc.

Как я могу сделать это, используя файлы _tags?


person Antoine    schedule 06.12.2014    source источник


Ответы (1)


Вот один из способов сделать это с помощью myocamlbuild.ml и _tags.

В myocamlbuild.ml добавьте инструкцию flag, чтобы позволить ocamlbuild распознавать новый тег — здесь keep_asm — который будет включать -S для выбранных файлов при компиляции в native:

flag ["ocaml";"compile";"native";"keep_asm"] (S [A "-S"]);

Без строки "native" в списке, переданном в flag, флаг был бы включен для любого этапа компиляции с использованием ocaml (на что указывают строки "ocaml" и "compile") и срабатывал бы когда вызывается ocamlc, что вам не нужно.

Таким образом, для полноценного автономного myocamlbuild.ml, выполняющего только вышеперечисленное, получится следующее:

open Ocamlbuild_plugin;;
open Command;;

dispatch begin function
  | Before_rules -> 
    begin
    end
  | After_rules ->
    begin
      flag ["ocaml";"compile";"native";"keep_asm"] (S [ A "-S"]);
    end
  | _ -> ()
end

Определив новый тег, вы можете использовать его в файле _tags как любой другой тег, например:

<myfile.ml>: use_bigarray, keep_asm 
person didierc    schedule 06.12.2014