0

我下载了这个 Makefile,我很难理解它是如何工作的。

我正在Ocaml对某些模块进行编程,我实现了一个interface(.mli)。奇怪的是,即使我.mli在相应文件之前添加.ml文件,Makefile 似乎也跳过了它;所以我得到了错误

could not find the X.cmi for the module X.

更糟糕的是,我添加了一些不需要的文件,.mli而且奇怪的是 Makefile 再次将它们自动添加到源列表中。
我说的很奇怪,但对于 Makefiles 专家来说,这可能是完全正常的。

我不是 Makefile 方面的专家,谁能帮我理解这个 Makefile 是如何工作的?

当我替换该行时,编译工作正常

$(EXEC): $(OBJS) 
$(CAMLC) $(CUSTOM) -o $(EXEC) $(LIBS) $(OBJS)

$(EXEC): $(SOURCES) 
$(CAMLC) $(CUSTOM) -o $(EXEC) $(LIBS) $(SOURCES)

并添加所需的 .mli

4

1 回答 1

0

尝试

# Makefile

PRG =

# Fichiers dans l'ordre
ML =
MLI = 

CMO=${ML:.ml=.cmo}
CMX=${ML:.ml=.cmx}
CMI=${ML:.mli=.cmi}

OCAMLFLAGS = -I
OCAMLLD = -ccopt -L.
OCAMLOPT = ocamlopt.opt
OCAMLC = ocamlc.opt
OCAMLDEP = ocamldep

${PRG}: ${OCAMLOPT} ${OCAMLFLAGS} ${OCAMLLD} -o $@ ${CMX}   
    make clean

.SUFFIXES: .ml .mli .cmo .cmx .cmi

.ml.cmx: 
    ${OCAMLOPT} ${OCAMLFLAGS} ${OCAMLLD} -c $<

.ml.cmo: 
    ${OCAMLC} -c $<

.mli.cmi: 
    ${OCAMLC} -c $<

clean:
    rm -f *~ *.o *.cm? *mli

fullclean: clean
    rm -f .depend ${PRG}

depend: .depend
.depend: ${ML} ${MLI}
    rm -f .depend
    ${OCAMLDEP} ${ML} ${MLI} > .depend

include .depend

您必须设置 PRG、ML、MLI、FLAGS、LD。:)

于 2012-07-31T14:05:55.470 回答