Я учусь тому, как работают компиляторы. Я прочитал учебное пособие о том, как использовать Ocamllex и Ocamlyacc для чтения входных данных из исходного кода, генерации токенов и генерации синтетического дерева для последующего вычисления выполнения программы. Мне приходилось часто перекомпилировать код, пока я был в процессе обучения, и я решил создать make-файл для автоматизации этого шага. Поскольку я новичок как в Ocaml, так и в make-файлах, я изо всех сил пытаюсь заставить работать make-файл.
Из моих исследований в Google я до сих пор мог создать этот make-файл, но последняя ошибка, которую я получил, была: "make: *** Нет правил для создания цели" lexer.mli ", необходимой для" зависимость ". Stop.".
# 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
Как мне создать подходящий make-файл для этой задачи?