Skip to content

Взаимодействие с кодом на C

В этом рецепте раскрываются детали взаимодействия с кодом на языке программирования C из OCaml.

Полезные ссылки

Конфигурирование флагов сборки

Пример ниже взят из библиотеки crypt.

lib/config/
├── discover.ml
└── dune

lib/config/dune

(executable
 (name discover)
 (libraries dune-configurator))

lib/config/discover.ml

ocaml
module C = Configurator.V1

let () =
  C.main ~name:"crypt" begin fun c ->
      if C.ocaml_config_var_exn c "system" = "macosx" then
        C.Flags.write_sexp "c_library_flags.sexp" []
      else 
        C.Flags.write_sexp "c_library_flags.sexp" [ "-lcrypt" ]
    end

lib/dune

(library
 ...
 (foreign_stubs ...)
 (c_library_flags
  (:include c_library_flags.sexp)))


(rule
 (targets c_library_flags.sexp)
 (action
  (run ./config/discover.exe)))