BUENOS DIAS!!!
Y entonces, va ESB y dice ¿[AL-ES] ESB (consultas sobre (makefile))?
> Hola (ESB)
>
> Tengo un mensaje de error en un archivo makefile, este es el escrito:
>
> CC = gcc.exe
> AR = ar.exe
>
> OPTIONS = -ffast-math \
> -fomit-frame-pointer\
>
> OBJ = NVLSector.o \
> NVLVisor.o \
> NVLNivel.o \
> NVLMain.o
>
> %.o : %.cpp \
> $(CC) -c $(OPTIONS) $< -o $@
>
> NVLVisor.exe : $(OBJ) \
> $(CC) -c $(OPTIONS) $(OBJ) -oNVLVisor.exe
Puede que el error este aqui, quita los dos ultimos \
> y no da error:
> ¿ Por qué de usar el, \, y los otros makefile con *.c archivos, no lo usan ?
el \ significa que la linea no acaba y que la siguiente se tome como parte de
esa, p.e. la linea de OBJ = ..... podrias haberla escrito asi:
OBJ = NVLSector.o NVLVisor.o NVLNivel.o NVLMain.o
y funcionaria exactamente igual, por otro lado en los makefiles suele haber
lineas del tipo:
objetivo a conseguir : objetivos previos necesarios
<tabulador> orden(es) para conseguir objetivo
donde objetivos son archivos (codigo fuente, codigo objeto), si falta el
objetivo a conseguir, o alguno de los objetivos anteriores a cambiado (p.e.
por que lo editaste) ejecuta la orden para compilarlo, y antes comprueba y
construye si es necesario cada uno de los objetivos previos.
Por ejemplo tu ultima linea que (deberian ser dos) dice que para conseguir
NVLVisor.exe necesita todos los archivos NVLSector.o, y debajo la orden que
hay que hacer para enlazar todos esos archivos .o y conseguir el exe.
por eso tienes que quitar el \ del final, por que deben ser dos, tambien es
importante lo de la tecla del tabulador, si no dejas esa tecla, o usas
espacios, o tu editor combierte el tabulador a espacios, puede (solo puede)
que tengas problemas.
la linea anterior (deberian ser dos) lo que indica es como conseguir cada uno
de esos .o a partir del archivo .cpp, es un poco expecial por que los % y la
@ son una especie de comodines, cuando makefile lo coge es como si hubieses
escrito:
NVLSector.o : NVLSector.cpp
$(CC) -c $(OPTIONS) NVLSector.cpp -o NVLSector.o
Con cada uno de los archivos .cpp que existan, y que significa que para
conseguir NVLSector.o necesita NVLSector.cpp y la orden que hay que dar es:
$(CC) -c $(OPTIONS) NVLSector.cpp -o NVLSector.o
Como repetir esas dos lineas para cada archivo .cpp es un coñazo, se utilizan
los comodines.
de todas maneras, quiza la linea no este bien escrita, si te sigue fallando
prueba a usar:
$(OBJ): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
Total que tu makefile quedaria asi:
CC = gcc.exe
AR = ar.exe
OPTIONS = -ffast-math -fomit-frame-pointer
OBJ = NVLSector.o NVLVisor.o NVLNivel.o NVLMain.o
$(OBJ): %.o: %.cpp
$(CC) -c $(OPTIONS) $< -o $@
NVLVisor.exe : $(OBJ)
$(CC) -c $(OPTIONS) $(OBJ) -oNVLVisor.exe
gueno, espero que esto de sirva un poco de ayuda, un saludo.
--
Los usuarios de Spectrum cargan antes de disparar
_
Grettings of __ _| |___ __ _ Alvaro@... LiNUX USER #66734
Saludos / _` | / -_) _` | http://pagina.de/alea A_Alea@...
de \__,_|_\___\__,_| MS Messenger: alvaroalea@...
Para obtener Llave Publica GnuPGP un mail con subject: enviar clave pub