Problemas con mi Makefile

He descargado así Makefile y me cuesta entender cómo funciona.

Estoy programando en Ocaml y para algún módulo, implementé un interface (.mli). Extrañamente, incluso cuando agrego el .mli presentar ante el correspondiente .ml archivo, Makefile parece omitirlo; así que estoy recibiendo el error

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

Peor aún, agregué un archivo sin el requerido .mli y extrañamente nuevamente el Makefile los agregó automáticamente a la lista de fuentes.
estoy diciendo extrañamente pero tal vez sea perfectamente normal para un experto en Makefiles.

No soy un experto en lo que respecta a Makefile, ¿alguien puede ayudarme a comprender cómo funciona este Makefile?

La compilación funciona bien, cuando reemplazo la línea

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

¡Con

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

y agregue el .mli requerido

preguntado el 31 de julio de 12 a las 14:07

Esto puede tomar algunas iteraciones. ¿Qué pasa cuando tú make X.cmi? -

X.cmi no existe en ese momento, cuando compilo X.ml por separado con ocamlc y hago, la compilación es exitosa. X.cmi es el resultado de ocamlc -c X.mli -

Exactamente; Cuando usted make X.cmi, le estás diciendo a Make que construya X.cmi. Haz ver que X.cmi no existe, entonces busca una regla para construirlo, ve que X.mli está presente y se ejecuta ocamlc -c X.mli. (Eso es lo que tienes suceder.) -

1 Respuestas

Intente

# 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

Deberá configurar PRG, ML, MLI, FLAGS, LD. :)

Respondido 31 Jul 12, 15:07

Probaré tu solución y te informaré, ¡gracias! ;) - jose elcid

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.