如何在Ocsigen项目中安排源文件

时间:2017-01-16 11:44:51

标签: makefile ocaml ocsigen

我从基本模板创建了一个简单的Ocsigen项目。一切都很好,直到我决定将所有源文件放在src目录中并在其中创建更多子目录,以便我的源代码被分区为模块并安排得很好。

不幸的是,当我尝试编译项目时,只编译主目录中的文件,并且不搜索src目录中的源文件。我已经阅读了项目模板生成的makefile,并尝试找到一种方法使其工作,但没有成功。具体而言,只更改CLIENT_FILESSERVER_FILESMakefile.options的值是不够的。我试图像这样强制进行递归搜索:

SERVER_FILES := $(shell find src -name "*.eliom" -or -name "*.eliomi")

但它没有用。 Makefile显然需要更多的变化才能接受。我也尝试使用$(wildcard src/*.eliom)进行扁平结构,但这也不起作用。

有没有办法实现我的需要,而不需要对模板Makefile的一半进行更改,这对我来说非常神奇,难以修改,甚至更难以完全理解和重写。

1 个答案:

答案 0 :(得分:1)

我可以向你推荐Danny Willems的这篇非常有用的帖子Ocsigen: how to compile an Eliom project. Understand the compilation process in deep. 如果你愿意,你可以使用任何框架使其自动化,例如,如果你想使用ocamlbuild,你可以自己创建一个Makefile并将这些行放入其中

SOURCE_FILES = src
OCB_FLAGS = -plugin-tags "package(eliom.ocamlbuild)" -use-ocamlfind -I $(SOURCE_FILES)
OCB = ocamlbuild $(OCB_FLAGS)
...
$(PATH_YOU_WANT)$(YOUR_PROJECT_NAME).js:
  $(OCB) -no-hygiene $@

然后在_tags文件中写:

true: eliom_ppx
<*/server/*>: package(eliom.server), thread
<*/client/*>: package(eliom.client)

如果您在代码中使用了有时需要的exom扩展名,则需要第一行。在shell中发布make,ocamlbuild会将您的代码编译为_build/src/server_build/src/client