x3minater Posted May 8, 2012 at 08:59 PM Report #453950 Posted May 8, 2012 at 08:59 PM Boas, eu estou a tentar fazer um ficheiro makefile que compile um programa dividido por várias pastas. Os ficheiros *.c em src\, os ficheiros *.h em include\, os ficheiros *.o em obj\ e guarde os executáveis em bin\ Sei que tenho de usar o vpath, mas não percebo o que estou a fazer mal neste código: vpath %.c src/ vpath %.h include/ vpath %.o obj/ CC = gcc CFLAGS = -g -Wall -ansi -pedantic -pthread -lrt all: yascS yascC # rm *.o yascC: yascC.o funcoes.o $(CC) $(CFLAGS) -o bin/yascC obj/yascC.o obj/funcoes.o yascC.o: src/yascC.c include/estruturas.h include/cabecalhos.h $(CC) $(CFLAGS) -c src/yascC.c yascS: yascS.o funcoes.o $(CC) $(CFLAGS) -o bin/yascS obj/yascS.o obj/funcoes.o yascS.o: src/yascS.c include/estruturas.h include/cabecalhos.h $(CC) $(CFLAGS) -c src/yascS.c funcoes.o: src/funcoes.c include/estruturas.h include/cabecalhos.h $(CC) $(CFLAGS) -c src/funcoes.c clean: rm -f *.o *~ yascS yascC Dá-me este erro: src/yascS.c:11:24: erro fatal: estruturas.h: Ficheiro ou directoria inexistentecompilação terminada. E o ficheiro estruturas.h está lá na pasta include. E tenho de por a localização antes dos nomes dos ficheiros dependentes, usando o vpath?
pmg Posted May 8, 2012 at 09:14 PM Report #453954 Posted May 8, 2012 at 09:14 PM Dá-me este erro: src/yascS.c:11:24: erro fatal: estruturas.h: Ficheiro ou directoria inexistentecompilação terminada. Repara que o erro é do compilador, nao é do make. Experimenta alterar o source para #include "../include/estruturas.h" What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
x3minater Posted May 8, 2012 at 09:49 PM Author Report #453963 Posted May 8, 2012 at 09:49 PM Muito obrigado 😉 Esse problema já está resolvido. Existe alguma maneira de tornar esse include mais portátil? Por exemplo se eu quiser levar o programa para outra máquina e para um diretório diferente. Agora surgiu-me outro problema: gcc: erro: obj/yascS.o: Ficheiro ou directoria inexistentegcc: erro: obj/funcoes.o: Ficheiro ou directoria inexistente Acho que o make não está a guardar os ficheiros na pasta obj (para os ficheiros *.o)
pmg Posted May 8, 2012 at 09:55 PM Report #453965 Posted May 8, 2012 at 09:55 PM Agora surgiu-me outro problema: Acho que o make não está a guardar os ficheiros na pasta obj (para os ficheiros *.o) Nao disseste ao $(CC) o output $(CC) $(FLAGS) -o obj/funcoes.o -c ... Suponho que o vpath so funciona para pesquisa de ficheiros, nao funciona para output. Experimenta com o parametro -o e logo ves. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
x3minater Posted May 8, 2012 at 11:06 PM Author Report #453979 Posted May 8, 2012 at 11:06 PM Nao disseste ao $(CC) o output $(CC) $(FLAGS) -o obj/funcoes.o -c ... Suponho que o vpath so funciona para pesquisa de ficheiros, nao funciona para output. Experimenta com o parametro -o e logo ves. Não fez nada =/
x3minater Posted May 9, 2012 at 05:19 PM Author Report #454132 Posted May 9, 2012 at 05:19 PM Já está resolvido 😉 Obrigado pmg à mesma. Esta é a make que tenho agora: vpath %.c src/ vpath %.h include/ vpath %.o obj/ CC = gcc CFLAGS = -g -Wall -ansi -pedantic -Iinclude -pthread -lrt LDFLAGS = -pthread -lrt all: yascS yascC # rm *.o .c.o: $(CC) $(CFLAGS) -c -o obj/$@ $< yascC: yascC.o funcoes.o $(CC) $(CFLAGS) $(LDFLAGS) -o bin/yascC obj/yascC.o obj/funcoes.o yascC.o: src/yascC.c include/estruturas.h include/cabecalhos.h yascS: yascS.o funcoes.o $(CC) $(CFLAGS) $(LDFLAGS) -o bin/yascS obj/yascS.o obj/funcoes.o yascS.o: src/yascS.c include/estruturas.h include/cabecalhos.h funcoes.o: src/funcoes.c include/estruturas.h include/cabecalhos.h clean: rm -f *.o obj/*.o *~ yascS yascC
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