Mesmo que você seja daqueles que não abre mão de uma IDE (Ambiente de Desenvolvimento Integrado), seria muito interessante saber o que está rolando a nível de compilador. # gcc -o hello_world hello_world.c 08: #include "funcoes.h" 06: #ifndef funcoes_H 06: #include "funcoes.h" # gcc -o main.o -c main.c # gcc main.o funcoes.o -o projeto # gcc -o main.o -c main.c # gcc -o funcoes.o -c funcoes.c # gcc -o main.o -c main.c 05: OBJS=main.o funcoes.o # make funcoes.o # make projeto
Uma IDE serve para agilizar um projeto, mas dependendo do nível de entendimento do programador ela pode fazer papel de mascaradora, ocultando todos os passos que são necessários para se compilar um projeto.
» Post Completo...*** GCC ***
O GCC (GNU Compiler Collection) é o compilador padrão de c.
Para compilar um código no gcc você faz da seguinte forma:
Muito simples, mas esse uso simplificado compila não mais do que um hello_world ! Pois um projeto possui mais arquivos e passos diferentes de compilação.
É recomendado, quando se tem um projeto maior, o uso de vários arquivos (*.h e *.c) para que se tenha uma maior organização.
*** Lincando OBJ'S ***
Imagine o seguinte projeto:
main.c - Possui a função main e o código de interação com o usuário.
10: int main(void){
--: ...
16: return 0;
17: }
07: #define funcoes_H
09: #include <math.h>
11: float areaRetangulo(float base,float altura);
12: float areaCirculo(float raio);
14: #endif
08: float areaRetangulo(float base,float altura){
09: return base*altura;
10: }
12: float areaCirculo(float raio){
13: return 2*M_PI*raio;
14: }
Primeiro vamos criar os obj's (*.obj ou *.o), que são um tipo de código intermediário.
# gcc -o funcoes.o -c funcoes.c
Por exemplo, o que seria necessário se eu alterar o código do:
# gcc main.o funcoes.o -o projeto
# gcc main.o funcoes.o -o projeto
# gcc -o funcoes.o -c funcoes.c
# gcc main.o funcoes.o -o projeto
Makefile é apenas o nome do arquivo que o comando make utiliza para compilar o seu projeto.
Imagine o Makefile como um arquivo shell script com a vantagem extra de resolver problemas de dependência de arquivos.
Para compilar nosso projeto nós vamos escrever o Makefile da seguinte maneira:
07: all: projeto
09: projeto: $(OBJS)
10: gcc $(OBJS) -o $@
12: main.o: main.c
13: gcc -c main.c -o main.o
15: funcoes.o: funcoes.c
16: gcc -c $< -o $@
Pode parecer estranho, mas a linhas 13 e 16 fazem praticamente a mesma coisa.
Para compilar o arquivo funcoes.c basta usar o comando:
2. Caso funcoes.c seja mais recente que funcoes.o ele irá executar o código logo abaixo (O TAB no começo da linha é obrigatório).
Para compilar o projeto você pode usar um dos 3 comandos:
# make all
# make
Não achou estranho eu usar #ifndef, #define e #endif no arquivo funcoes.h ?!
Estes comandos são chamados diretivas de compilação e são interpretadas pelo pré-processador. É o código antes do código.
Com #define podemos incluir um arquivo em outro, e com #ifndef e #endif criamos um bloco condicional.
Entendendo melhor, não podemos declarar o escopo de uma função mais de uma vez, e quando incluímos um arquivo *.h mais de uma vez é exatamente isto que ocorre.
No nosso exemplo, a diretiva #ifndef serve para garantir que o escopo das funções só sejam incluídos em em arquivo caso a #define não exista. A #define passa a existir logo em seguida e o bloco é finalizado em #endif.
*** Arquivos ***
*** LINK'S ***
.:: Menu Rápido ::.
Linux | C/C++ | Downloads | SDL | [×]
Para programar tem que ser Linux ! Para Desktop prefiro o Ubuntu !
A melhor maneira de se descobrir uma lib gratuita é nos repositórios do Ubuntu: $apt-cache search lib <palavra_chave> dev
Ou pelo devpaks.org, mas o repositório tem me ajudado mais !!!
A melhor maneira de se descobrir uma lib gratuita é nos repositórios do Ubuntu: $apt-cache search lib <palavra_chave> dev
Ou pelo devpaks.org, mas o repositório tem me ajudado mais !!!
- Script's GIMP - Python-Fu !!!
- Dicas Web
- Vídeo Compiz Fusion (Desktop 3D)
- Compilando com gcc e Makefile
- Que tal mudar para Ubuntu ?!
C e C++ são minhas linguagens de programação. No começo foi muito difícil, mas agora já estou mais prático (Ainda não é fácil).
- SDL - A Biblioteca dos Jogos 2D
- Analisador léxico de arquivos script
- Simpatizando com a Libxml2
- AsciiGen - Tabela ASCII em C
- Conexão com API C do MySQL
- Compilando com gcc e Makefile
Jogos e programas de minha autoria !
- DR Tetris 0.3 - Tetris no estilo tradicional !
- DR Quebra-Cabeça disponível para download !!!
- Freeggs - Liberdade aos ovos \o/
Se você quer aprender a desenhar... lápis e palel.
Se você quer aprender a programar jogos... SDL !!!
Se você quer aprender a programar jogos... SDL !!!
- Carregando mapas 2D no formato TMX
- Controle de tempo e Frame Rate
- SDL em Processamento de Imagens
- SDL_Surface - Introdução detalhada
- Imprimindo texto com SDL_Ttf
- SDL_Collide - Colisão 2D para jogos
- Tocando música e sons com SDL_mixer
- Gerando e carregando mapas 2D em jogos
- SDL - A Biblioteca dos Jogos 2D
quarta-feira, 26 de setembro de 2007
Compilando com gcc e Makefile
Mesmo que você seja daqueles que não abre mão de uma IDE (Ambiente de Desenvolvimento Integrado), seria muito interessante saber o que está rolando a nível de compilador.
Uma IDE serve para agilizar um projeto, mas dependendo do nível de entendimento do programador ela pode fazer papel de mascaradora, ocultando todos os passos que são necessários para se compilar um projeto.
» Post Completo...
Assinar:
Postar comentários (Atom)
2 comentários:
Excelente! Muito bem explicado! Eu ainda completaria com um 'make clean' e com e com um 'make install'
PROGNAME=projeto
BINDIR=/usr/local/bin
clean:
@echo "cleaning..."
rm -f $(OBJS)
install:
@echo "installing..."
cp $(PROGNAME) $(BINDIR)
Ajudou bastante! Valeu mesmo :)
Postar um comentário