PsySc0rpi0n Posted September 2, 2018 at 01:16 AM Report #611715 Posted September 2, 2018 at 01:16 AM Boas. Estou novamente com dificuldades em criar um Makefile. Tenho a seguinte estrutura de pastas: include/KHR/khrplatform.h include/glad/glad.h bin/ obj/ src/test.c src/glad.c Makefile Preciso de criar um Makefile para fazer os linkings e etc. Comecei através de um pequeno exemplo que encontrei na net: IDIR =../include CC=gcc CFLAGS=-I$(IDIR) ODIR=obj LDIR =../lib LIBS=-lm _DEPS = hellomake.h DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) _OBJ = hellomake.o hellofunc.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) $(ODIR)/%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) hellomake: $(OBJ) $(CC) -o $@ $^ $(CFLAGS) $(LIBS) .PHONY: clean clean: rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ E alterei para: CC = gcc LIBS = -lm -Werror -g -pedantic -Wall -std=c99 CFLAGS = -I$(INCDIR) -lGL -lX11 -lGLU -lglut INCDIR = include OBJDIR = obj BINDIR = bin SRCDIR = src TARGET = $(BINDIR)/test _DEPS = khrplatform.h glad.h DEPS = $(patsubst %, $(INCDIR)/KHR/%, $(INCDIR)/glad/%, $(_DEPS)) _OBJ = test.o glad.o OBJ = $(patsubst %, %(OBJDIR)/%, $(_OBJ)) $(OBJDIR)/%.o: $(SRCDIR)/%.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) TARGET: $(OBJDIR)/%.o $(CC) -o $@ $^ $(CFLAGS) $(LIBS) .PHONY: clean clean: rm -f $(OBJDIR)/*.o *~ core $(INCDIR)/*~ Ainda só tenho um include no file test.c mas pelo menos a compilação devia correr e talvez dar erros no file test.c mas estou apenas a obter o seguinte: make: *** No rule to make target 'obj/%.o', needed by 'TARGET'. Stop. Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
pwseo Posted September 2, 2018 at 10:29 AM Report #611717 Posted September 2, 2018 at 10:29 AM @PsySc0rpi0n Tens ali um pequeno erro onde declaras a variável OBJ: dentro da aplicação da função patsubst, utilizas %(OBJDIR)/% onde deverias utilizar $(OBJDIR)/%. Não sei se era isso que estava a provocar-te o problema, mas experimenta corrigir (só vi isto por alto).
PsySc0rpi0n Posted September 2, 2018 at 10:35 AM Author Report #611718 Posted September 2, 2018 at 10:35 AM 5 minutes ago, pwseo said: @PsySc0rpi0n Tens ali um pequeno erro onde declaras a variável OBJ: dentro da aplicação da função patsubst, utilizas %(OBJDIR)/% onde deverias utilizar $(OBJDIR)/%. Não sei se era isso que estava a provocar-te o problema, mas experimenta corrigir (só vi isto por alto). Já corrigi mas continua com o mesmo output! :s Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
pwseo Posted September 12, 2018 at 10:49 PM Report #611824 Posted September 12, 2018 at 10:49 PM @PsySc0rpi0n Desculpa a demora. Entretanto tenho estado menos disponível. Já vi o teu Makefile com mais detalhe e reparei que além do erro que corrigiste tens outros. Um diff da tua versão e da minha (corrigida) consiste no seguinte: $ diff Makefile.old Makefile.new 14c14 < OBJ = $(patsubst %, %(OBJDIR)/%, $(_OBJ)) --- > OBJ = $(patsubst %, $(OBJDIR)/%, $(_OBJ)) 19c19 < TARGET: $(OBJDIR)/%.o --- > $(TARGET): $(OBJ) Ou seja, além do erro que tinhas na invocação de patsubst, esqueceste-te de colocar TARGET dentro de $(...) e devias ter colocado como seu pré-requisito a variável $(OBJ) (que na prática já contém uma lista dos ficheiros .o que vais linkar) e não um padrão $(OBJDIR)/%.o, (utilizar este tipo de padrões implica teres um % tanto do lado do alvo como do pré-requisito). EDIT: mais uma coisa: estás a misturar as tuas variáveis CFLAGS e LIBS (p ex tens -lm na CFLAGS, quando esse argumento claramente deveria estar na LIBS)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now