Pour les nouveaux venus dans l'écosystème, il n'est pas clair quelle est la manière canoniquement préférée de structurer et de gérer la construction de projets OCaml de petite et moyenne taille. Je comprends les bases de ocamlc
- ils reflètent suffisamment les compilateurs C conventionnels d'UNIX pour sembler simples. Mais, au-delà du niveau de la compilation ponctuelle de fichiers individuels, la meilleure façon de gérer la compilation de manière simple et propre n'est pas claire. La question n'est pas de chercher des outils potentiels, mais de voir une ou quelques bonnes (assez bonnes) façons - validées par l'expérience de la communauté - de structurer et de construire des projets OCaml standard.
Mon cas d'utilisation modèle est un projet modeste mais non trivial, de pur OCaml ou OCaml plus une dépendance C. Un tel projet :
- contient un certain nombre de fichiers sources
- des liens vers un certain nombre de bibliothèques standard
- des liens vers une ou plusieurs bibliothèques de tierces parties
- inclut éventuellement une bibliothèque C et un wrapper OCaml en tant que sous-projet (bien que cela puisse également être géré séparément et inclus en tant que bibliothèque tierce, comme dans (3))
Plusieurs outils alternatifs se distinguent :
- Les Makefiles personnalisés semblent être la norme commune dans la plupart des paquets OCaml open source, mais ils sont frustrants, verbeux et complexes - encore plus que pour les modestes projets C/C++. Pire encore, de nombreuses bibliothèques OCaml, même apparemment simples, superposent autoconf/automake pour une complexité encore plus grande.
- ocamlbuild semble offrir un mécanisme moderne et rationalisé pour automatiser les constructions avec une configuration minimale, mais il n'est pas bien documenté pour les nouveaux venus, ni représenté par des exemples dans les documents d'introduction de l'écosystème OCaml, ni visiblement utilisé par l'un des divers projets OCaml publiés que j'ai parcourus pour m'en inspirer.
- OASIS semble être une couche de convention et de code de bibliothèque au-dessus d'autres systèmes de construction pour supporter la construction d'un gestionnaire de paquets et d'une bibliothèque, comme Cabal.
(J'ai également vu OMake qui semble être un groupe qui s'autoproclame " make++
", qui comprend également une suite de règles standard pour les langages courants, dont OCaml, et ocaml-make née OCamlMakefile, fournissant un modèle de règles standard pour GNU make
.)
Est-ce que l'un d'entre eux est un moyen moderne et préféré de gérer les constructions OCaml ?
Comment structurer au mieux les dossiers de projet ?
Comment les dépendances des bibliothèques tierces sont-elles incluses et gérées ? Est-il préférable de les installer au niveau du système, ou existe-t-il un moyen standard et simple de les gérer localement dans un projet ? Je préfère de loin un modèle dans lequel les projets restent aussi autonomes que possible.