Компиляция с внешней библиотекой (OASIS, OCamlfind) - PullRequest
0 голосов
/ 28 мая 2018

У меня есть новый проект, который я пытаюсь скомпилировать с OASIS.Все мои пакеты, кроме одного, устанавливаются с помощью opam.

Мой _oasis файл выглядит следующим образом:

(* usual package fields *)

Executable myexe
  Path:       src
  BuildTools: ocamlbuild
  MainIs:     myexe.ml
  BuildDepends:
        some_packages_installed_with_opam
        mylocalpackage

Я пытался oasis setup затем ./configure, но OCamlfind ответил, что не может 'т найти mylocalpackage.Поэтому я решил посмотреть, где OCamlfind ищет пакеты, и обнаружил, что вы можете установить переменную OCAMLPATH для добавления каталогов, в которые могут быть установлены пакеты.Поэтому я сделал export OCAMLPATH=path_to_mylocalpackage:$OCAMLPATH и попробовал снова.

oasis setup дает мне такой результат:

findlib: [WARNING] While parsing 'path_to_my_local_package/META.in': 
         The `directory' directive is required in this META definition

и ocamlfind query mylocalpackage дает мне этот результат:

ocamlfind: Package `mylocalpackage' not found

Я не знаю, должен ли я написать в _oasis, где найти этот пакет или если изменение переменной OCAMLPATH является решением.Но если это так, я не понимаю предупреждение.


Шаги для воспроизведения

Для тех, кто хотел бы попробовать:

  • Скачать why3

  • ./configure --enable-local
    make
    
  • Создать новый проект с этим _oasis файлом

    OASISFormat: 0.4
    Name:        myexe
    Version:     0.1
    Synopsis:    test file
    Authors:     SO
    License:     CC-BY-NC-SA
    Plugins:     StdFiles (0.4), DevFiles (0.4)
    Alphafeatures:          ocamlbuild_more_args
    XOCamlbuildExtraArgs:
      -use-ocamlfind
    
    Executable myexe
      Path:       src
      BuildTools: ocamlbuild
      MainIs:     myexe.ml
      BuildDepends:
            unix,
            str,
            num,
            dynlink,
            zip,
            menhirLib,
            why3
      NativeOpt:            -dtypes -g -annot
      ByteOpt:              -dtypes -g -annot
      CompiledObject:       best
    
  • oasis setup
    ./configure
    
  • Вы должны иметь эту ошибку: ocamlfind: Package 'why3' not found

1 Ответ

0 голосов
/ 31 мая 2018

Ну, это довольно нестандартный подход, который вы пробуете.Не уверен, зачем вам это нужно, так как обычно лучше просто установить пакет.В любом случае, когда вы используете переменную OCAMLPATH, вам нужно передать ей путь к папке lib, которая содержит папки, которые соответственно содержат файлы META.У меня следующая структура хранилища:

.
├── proj
└── why3-0.88.3

и в папке proj я запускаю скрипт configure со следующим OCAMLPATH:

OCAMLPATH=../why3-0.88.3/lib/:$OCAMLPATH ./configure

Послечто все работает, и вам даже не нужно больше передавать переменную OCAMLPATH на этапы компиляции, компоновки или выполнения.

...