我已经从基本模板创建了一个简单的Ocsigen项目。一切都很好,直到我决定将我所有的源文件放在src目录中,并在其中创建更多的子目录,这样我的源代码就可以划分成模块并很好地排列。
不幸的是,当我尝试编译项目时,只编译了主目录中的文件,并且没有在src目录中搜索源文件。我已经阅读了项目模板生成的makefile,并试图找出一种方法使其工作,但没有成功。具体地说,仅仅在Makefile.options中更改CLIENT_FILES和SERVER_FILES的值是不够的。我尝试使用递归搜索,如下所示:
SERVER_FILES := $(shell find src -name "*.eliom" -or -name "*.eliomi")但它并没有起作用。显然,Makefile需要更多的改变才能接受这一点。我也尝试过使用$(wildcard src/*.eliom)处理平面结构,但也不起作用。
因此,有没有什么方法可以在不更改一半的模板Makefile的情况下实现我需要的东西,这对我来说非常神奇,很难修改,甚至更难完全理解和重写。
发布于 2018-03-29 21:17:32
如果你愿意,我可以向你推荐丹尼·威利姆斯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)如果你在代码中使用了eliom的ppx扩展,那么第一行是必要的。在shell中发出make命令,ocamlbuild将把你的代码编译成_build/src/server和_build/src/client
https://stackoverflow.com/questions/41675677
复制相似问题