2

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

不幸的是,当我尝试编译项目时,只有主目录中的文件被编译,并且src没有在该目录中搜索源文件。我已经阅读了项目模板生成的makefile,并试图找出一种让它工作的方法,但没有成功。CLIENT_FILES具体来说,仅仅改变和SERVER_FILESin 的值是不够的Makefile.options。我试图像这样强加递归搜索:

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

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

那么有没有什么方法可以在不修改一半模板的情况下实现我所需要的Makefile,这对我来说相当神奇,难以修改,更难以完全理解和重写。

4

1 回答 1

1

我可以向您推荐 Danny Willems Ocsigen 的这篇非常有用的帖子:如何编译 Eliom 项目。深入了解编译过程。 如果需要,您可以使用任何框架使其自动化,例如,如果您想使用 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)

如果您在代码中使用了 eliom 的 ppx 扩展名,则需要第一行,这有时是必要的。在 shell 中发出 make,ocamlbuild 会将你的代码编译_build/src/server_build/src/client

于 2018-03-29T13:17:31.817 回答