如何为 Ocaml 项目生成正确的生成文件



我正在学习如何编译器工作。我阅读了有关如何使用 Ocamllex 和 Ocamlyacc 从源代码中读取输入、生成令牌并生成语法树的教程,以便稍后计算程序的执行。在学习过程中,我不得不经常重新编译代码,我决定创建一个 makefile 来自动化此步骤。由于我是Ocamal和makefile的新手,所以我正在努力使makefile工作。

到目前为止,根据我的谷歌研究,我可以创建这个制作文件,但我得到的最新错误是"make:***没有规则来制作目标'lexer.mli',这是'依赖'所需要的。 停下。

# The Caml compilers. You may have to add various -I options.
CAMLC = ocamlc
CAMLDEP = ocamldep
CAMLLEX = ocamllex
CAMLYACC = ocamlyacc
# Lex stuff
LEXSOURCES = lexer.mll
LEXGENERATED = lexer.mli lexer.ml
# Yacc stuff
YACCSOURCES = parser.mly
YACCGENERATED = parser.mli parser.ml
GENERATED = $(LEXGENERATED) $(YACCGENERATED)
# Caml sources
SOURCES =  $(GENERATED) calc.ml
# Caml object files to link
OBJS = lexer.cmo parser.cmo calc.cmo
# Name of executable file to generate
EXEC = calc
# This part should be generic
# Don't forget to create (touch) the file ./.depend at first use.
# Building the world
all: depend $(EXEC)
$(EXEC): $(GENERATED) $(OBJS)
    $(CAMLC) $(OBJS) -o $(EXEC)
.SUFFIXES:
.SUFFIXES: .ml .mli .cmo .cmi .cmx
.SUFFIXES: .mll .mly
.ml.cmo:
    $(CAMLC) -c $<
.mli.cmi:
    $(CAMLC) -c $<
.mll.ml:
    $(CAMLLEX) $<
.mly.ml:
    $(CAMLYACC) $<
# Clean up
clean:
    rm -f *.cm[io] *.cmx *~ .*~ #*#
    rm -f $(GENERATED)
    rm -f $(EXEC)
# Dependencies
depend: $(SOURCES) $(GENERATED) $(LEXSOURCES) $(YACCSOURCES)
    $(CAMLDEP) *.mli *.ml > .depend
include .depend

如何为此任务创建适当的生成文件?

Ocamllex 不会生成任何 mli 文件,您应该从 ocamllex 生成的文件列表中删除词法分析.mli。

请注意,如果您的目标不是学习 Makefile,那么让 dune(一个特定于 ocaml 的构建系统(处理构建过程会容易得多。

同样,ocamlyacc在特征方面已被menhir取代。你可能想看看。

相关内容

  • 没有找到相关文章

最新更新