Ajuda com MAKEFILE [RESOLVIDO]

1. Ajuda com MAKEFILE [RESOLVIDO]

joao pedro ache virgili
joaovirgili

(usa Ubuntu)

Enviado em 17/09/2016 - 19:33h

Olá. Tenho um trabalho para fazer em que o professor exige que a gente utilize o makefile. Além disso, sei que é um boa prática de programação e não quero simplesmente fazer, quero entender como faz e como funciona. O trabalho consiste em simular o jogo Pokemon GO utilizando estrutura de dados (pilha, fila, lista..), em que devo fazer isso com Pokedex, Pokemon, Ovos e Itens. Estou querendo separar um arquivo para Pokedex, um para Pokemon e ovos e outro para os Itens, e na main executando todos.
Comecei fazendo a parte da pokedex, deu certo, inclusive com makefile, onde utilizei os arquivos: main.c, pokedex.c, pokedex.h
Porém quando fui adicionar o arquivo Pokemon.c e Pokemon.h o makefile não está rodando!
Makefile:
main:	main.o	Pokedex.o	Pokemon.o
gcc main.o Pokedex.o -o main
main.o: main.c
gcc -c main.c

Pokedex.o: Pokedex.c Pokedex.h Pokemon.h
gcc -c Pokedex.c

Pokemon.o: Pokemon.c Pokemon.h
gcc -c Pokemon.c

clean:
rm *.o

Erro:
Pokedex.h:2:21: fatal error: Pokemon.h: Arquivo ou diretório não encontrado
compilation terminated.


Código de Pokedex.c : http://pastebin.com/kswhiapi
O código consiste em alocar os pokemon não registrados e utilizar as funções para registrar pokemon e imprimir pokedex.
Código de Pokedex.h : http://pastebin.com/Rnd4jA87
Aí está a inicialização das funções e a estrutura da pokedex. Um elemento da estrutura é o pokemon, que será uma outra esturura inicializada no arquivo Pokemon.h.

Não escrevi nada ainda nos arquivos Pokemon.c e Pokemon.h, mas eles já estão criados e mesmo assim dá erro.

Muito obrigado, talvez não tenha ficado claro, sou ruim de explicar hahaha

EDIT: Pokemon.h está escrito sim, segue:
#include <stdio.h> 

typedef struct {
int ID;
bool reg;
} tPokemon;

Apenas a esturura dos Pokemon, mas ainda não está completa. Fiz assim apenas para testes.


  


2. Re: Ajuda com MAKEFILE [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/09/2016 - 19:59h

A mensagem de erro não vem do comando make, mas sim da execução do compilador.

Use a notação “#include <cabeçalho>” apenas para os cabeçalhos do sistema. Para cabeçalhos feitos por você mesmo, residindo no mesmo diretório que os demais arquivos do programa, o certo é usar a forma “#include "cabeçalho"


3. Re: Ajuda com MAKEFILE [RESOLVIDO]

joao pedro ache virgili
joaovirgili

(usa Ubuntu)

Enviado em 17/09/2016 - 20:24h

paulo1205 escreveu:

A mensagem de erro não vem do comando make, mas sim da execução do compilador.

Use a notação “#include <cabeçalho>” apenas para os cabeçalhos do sistema. Para cabeçalhos feitos por você mesmo, residindo no mesmo diretório que os demais arquivos do programa, o certo é usar a forma “#include "cabeçalho"

Muito obrigado!
Nossa que erro besta, estou afim de me matar! Funcionou!
mas estou com outro erro, não relacionado com o makefile

Erro:
Pokemon.h:6:3: error: conflicting types for ‘tPokemon’
} tPokemon;

Pokemon.h:6:3: note: previous declaration of ‘tPokemon’ was here
} tPokemon;


Não entendo.. só tem um tPokemon, como está dando conflito e dizendo que já havia uma declaração?? Tenho que declarar ele previamente?



4. Re: Ajuda com MAKEFILE [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/09/2016 - 22:06h

O mesmo arquivo está sendo incluído duas vezes: uma diretamente, e outra por incluir outro arquivo que inclui o primeiro. Com isso a mesma declaração é enxergada duas vezes pelo compilador, mas ele entende como se fosses duas declarações para o mesmo nome de tipo, o que é inválido.

A forma de se proteger disso é usar include guards. Procure a respeito.


5. Re: Ajuda com MAKEFILE [RESOLVIDO]

joao pedro ache virgili
joaovirgili

(usa Ubuntu)

Enviado em 18/09/2016 - 07:07h

Funcionou perfeitamente, muito obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts