Estoy tratando de hacer un archivo MAKE para una calculadora simple para un proyecto universitario. Lo necesito hecho, y he buscado tutoriales en la web y finalmente encontré este código:
IDIR =include CC=gcc CFLAGS=-I$(IDIR) ODIR=obj LDIR=lib SDIR=src LIBS=-lm _DEPS = calc.h DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) _OBJ = calc.o libcalc.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) $(ODIR)/%.o: $(SDIR)/%.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) calc: $(OBJ) gcc -o $@ $^ $(CFLAGS) $(LIBS) .PHONY: clean clean: rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~La salida del comando make es
gcc -c -o obj/calc.o calc.c -I../include Assembler messages: Fatal error: can't create obj/calc.o: No such file or directory make: *** [obj/calc.o] Error 1Mi profesor no nos dio ninguna pista ni instrucción para esto, así que estoy realmente perdido.
Mi proyecto está dividido en tres carpetas: lib , src e include . src contiene el código fuente del proyecto, denominado calc.c , include contiene el encabezado denominado calc.h y lib contiene la biblioteca denominada libcalc.c .
EDITAR: descubrí este error, y fue que el directorio obj en src no se creó. Sin embargo, sigue sin funcionar. El nuevo mensaje de error es:
make: *** No rule to make target `obj/libcalc.o', needed by `calc'. Stop.EDIT 2: Acabo de mover libcalc.c de lib a obj y funcionó bien. No es ideal, pero hace lo que necesito.
El directorio obj no existe, por lo que gcc no puede escribir el archivo de salida allí.
Puede crearlo automáticamente desde el Makefile, pero dependiendo de lo que quiera hacer, un simple mkdir obj podría ser todo lo que necesita.
Sin embargo, parece que está ejecutando su Makefile desde el directorio src . Lo más probable es que desee ejecutarlo desde el directorio raíz de su proyecto y especificar src/ donde sea necesario. Le gustaría agregar una variable SDIR (o similar) para eso; asegúrese de eliminar ../ en LDIR , IDIR y ODIR en ese caso.
Por ejemplo, donde actualmente usa %.c , use $(SDIR)/%.c en su lugar, y mueva su Makefile apropiadamente.
de acuerdo con su comando cli, está ejecutando su archivo MAKE en src/ , lo cual está bien, pero gcc no creará la carpeta faltante para usted. Aquí está el código que se ejecuta en mi Linux:
$ tree . └── test2.c 0 directories, 1 file $ gcc -c -o obj/test2.o test2.c Assembler messages: Fatal error: can't create obj/test2.o: No such file or directory $ mkdir obj $ gcc -c -o obj/test2.o test2.c $ tree . ├── obj │ └── test2.o └── test2.c 1 directory, 2 filesToque main.o en src/obj que funcionó para mí