我从基本模板创建了一个简单的Ocsigen项目。一切都很好,直到我决定将所有源文件放在src
目录中并在其中创建更多子目录,以便我的源代码被分区为模块并安排得很好。
不幸的是,当我尝试编译项目时,只编译主目录中的文件,并且不搜索src
目录中的源文件。我已经阅读了项目模板生成的makefile,并尝试找到一种方法使其工作,但没有成功。具体而言,只更改CLIENT_FILES
中SERVER_FILES
和Makefile.options
的值是不够的。我试图像这样强制进行递归搜索:
SERVER_FILES := $(shell find src -name "*.eliom" -or -name "*.eliomi")
但它没有用。 Makefile
显然需要更多的变化才能接受。我也尝试使用$(wildcard src/*.eliom)
进行扁平结构,但这也不起作用。
有没有办法实现我的需要,而不需要对模板Makefile
的一半进行更改,这对我来说非常神奇,难以修改,甚至更难以完全理解和重写。
答案 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