Bom, esse tutorial eu escrevi baseado no Ubuntu ( a distro que estou usando atualmente ) mas pode ser usado para qualquer distro.
1 - O básico
2 - Configure
3 - make
4 - make install
5 - Otimizando o source
1 - O Básico
Bom, compilar o programa envolve tres coisas:
1 - Verificar se o sistema está pronto para compilar e rodar o programa ( configure )
2 - Compilar o Programa
3 - instalar o programa
Antes de começar, nesses pacotes geralmente vem um arquivo texto, chamado readme, leiame, install, etc. Leia . Nesse arquivo geralmente vem instruções para instalação.
No primeiro passo é executado um script, geralmente chamado de "configure". Ele faz um série de testes, verificando dependencias, etc. No final do processo, ele cria um arquivo, chamado "Makefile". É por esse arquivo que o comando "make" se orienta. o make lê o arquivo Makefile, e chama o gcc ou o g++ ( os compiladores, que realmente compilam o programa ) de acordo com as variaveis que ele econtrou no Makefile. Isso inclue aonde estão as dependências, etc.
No terceiro e ultimo passo, o make copia os arquivos compilados para o seus respectivos diretórios. Como esse comando envolve copiar arquivos para fora da pasta HOME, deve ser executado como root .
Descompactando a fonte
Geralmente, as fontes vem compactadas nos formatos gunzip ou bzip2 ( gz ou bz2, respectivamente ). exemplo:
fonte.tar.bz # gunzip
fonte.tar.bz2 #bzip2
O tar é o programa que preserva a ordem dos diretorios dentro do arquivo compactado. e o gunzip e o bzip2 é que fazem a compactação. Por isso da extensão ser tar.bz2.
Para descompactar:
tar -xzvf fonte.tar.gz #para arquivos Gunzip
tar -xjvf fonte.tar.bz2 #Para arquivoz Bzip2
onde:
tar: chamada do programa tar
x : Parâmetro passado ao tar, que significa extract, descompactar
z ou j: Indica que o arquivo está compactado em Gunzip ou Bzip2, respectivamente
v: Verbose, para mostrar quais arquivos estão sendo descompactados
f: Passa o parâmetro do arquivo que será descompactado, por isso é o ultimo argumento antes do nome do arquivo
fonte.tar.gz: O nome do arquivo
isso irá descompactar o arquivo no diretorio corrente ( se vc não sabe aonde está, execute pwd )
2- O configure
O configure, como foi dito, é ( geralmente ) o nome do arquivo que faz o teste das malditas dependências e cria o Makefile. o script pode ser chamado também, de config ou install.sh
Para chama-lo, entre no diretorio da fonte ( usando o cd ) e execute:
./configure
O "./" é para indicar o shel para executar o script, e o configure é o nome do script.
Geralmente ele começa bem...dai..do nada, ele retorna um erro, como esse:
Check SDL.... error, libsdl not found
Se eu tentar dar o make, ele retornará:
make: *** Nenhum alvo indicado e nenhum arquivo make encontrado. Pare.
Isso é normal, como o configure não terminou direito, não criou o Makefile e o make não por onde se orientar.
Não encontrar dependências é normal, principalmente em distros livecd, como Kurumin e o Ubuntu. Esse tipo de distro, para economizar espaço, inclue apenas os arquivos necessários para rodar o programa ( as libs ), mas não incluem os arquivos necessários para compilar os programas. No Ubuntu, nem os compiladores básicos ( como o gcc )vem instalados, vc tem que instalar usando o comando:
sudo apt-get install build-essential
Resolvendo Dependencias usando Gerenciadores de programas
Eu ensinarei esse passos usando o apt-get, mas pode ser usado facilmente outro gerenciador de pacotes.
Analisando a mensagem de erro que o script me retornou, chego a conclusão de que ele não encontrou a libsdl. Resolver isso é fácil, usando o apt-get ou urpm.
no apt-get:
apt-cache search nome-do-pacote
exemplo:
apt-cache search libsdl
saída:
libsdl-image1.2-dev - development files for SDL 1.2 image loading libray
libsdl-mixer1.2-dev - development files for SDL1.2 mixer library
libsdl-ttf2.0-0 - ttf library for Simple DirectMedia Layer with FreeType 2 support
libsdl-ttf2.0-dev - development files for SDL ttf library (version 2.0)
libsdl1.2debian - Simple DirectMedia Layer
libsdl1.2debian-all - Simple DirectMedia Layer (with all available options)
libsdl1.2debian-alsa - Simple DirectMedia Layer (with X11 and ALSA options)
libsdl1.2debian-esd - Simple DirectMedia Layer (with X11 and esound options)
libsdl1.2debian-oss - Simple DirectMedia Layer (with X11 and OSS options)
libsdl-image1.2 - Biblioteca p/ abertura de imagens para Simple DirectMedia Layer 1.2
libsdl-mixer1.2 - Biblioteca de mixer para Simple DirectMedia Layer 1.2
libsdl1.2-dev - Arquivos de desenvolvimento da Simple DirecMedia Layer.
gstreamer0.8-sdl - SDL videosink plugin for GStreamer
libsdl-console - console that can be added to any SDL application
libsdl-console-dev - development files for libsdl-console
libsdl-erlang - Erlang bindings to the Simple Direct Media Library
libsdl-gfx1.2-4 - drawing and graphical effects extension for SDL
libsdl-gfx1.2-dev - development files for SDL_gfx
libsdl-net1.2 - network library for Simple DirectMedia Layer
libsdl-ocaml - OCaml bindings for SDL - runtime files
libsdl-ocaml-dev - OCaml bindings for SDL - development files
libsdl-pango-dev - text rendering with Pango in SDL applications (development)
libsdl-pango1 - text rendering with Pango in SDL applications (shared library)
libsdl-perl - SDL bindings for the Perl language
libsdl-ruby1.8 - Ruby/SDL interface for Ruby
libsdl-sge - extension of graphic functions for the SDL multimedia library
libsdl-sge-dev - development files for libsdl-sge
libsdl-sound1.2 - Decoder of several sound file formats for SDL
libsdl-sound1.2-dev - Development files for SDL_sound
libsdl-stretch-0-2 - stretch functions for Simple DirectMedia Layer
libsdl-stretch-dev - development files for SDL_stretch library
libsdl1.2debian-arts - Simple DirectMedia Layer (with X11 and aRts options)
libsdl1.2debian-nas - Simple DirectMedia Layer (with X11 and NAS options)
libsdl-net1.2-dev - Arquivos de desenvolvimento para a biblioteca de rede SDL.
lgeneral - A "Panzer General" - like game
Analisando a saída do comando, vemos que temos que instalar o pacote libsdl1.2-dev.Mas perae, porque não o pacote libsdl1.2debian?
Simples, porque o pacote libsdl1.2debian ( equivalente ao libsdl-1.2 em outros gerenciadores ) contém os arquivos necessários para rodar programas que usam essa lib. Esse pacote não contém os arquivos necessários para compilar programas que usam SDL. Para compilar, precisamos do libsdl1.2-dev . Isso se aplica a qualquer pacote. exemplo:
libgtk2.0-dev e libgtk2.0-0
libcairo2 e libcairo2-dev
Tem "dev" ou "devel" no nome do pacote, pode ter certeza que são as headers para compilação.
3 - comando Make
O make não tem mistério, quando o configure termina corretamente, vc executa no terminal:
make
E vc verá todo o processamento do código fonte.
Raramente acontece erros na hora do make, alguns que ja aconteceram comigo foram: Faltar pacotes que o configure não detectou, quando isso acontecer com vc, use o apt-get.
Outra coisa que pode acontecer, é erro no código fonte, causado por alguma icompatibilidade com a versão das dependencias instaladas em seu PC. Um exemplo, é o amule. O safado não compila usando o WXGTK 2.8.3. Da erro na hora do make. Mas se vc usar a versão 2.6.4, ele compila.
Outro erro que ja aconteceu comigo, foi o "segmentation fault" ( acho que é assim que se escreve ) geralmente ocorria quando eu tentava compilar algum programa, com varios programas abertos.
4 - make install
Esse é fácil. Depois que compilou o programa, é só executar ( como root )
make install
Ele irá copiar todos os arquivos compilados para o diretório de instalação, geralmente o /usr/local , os executaveis vão para o /usr/local/bin, os arquivos de configurão vão para /usr/local/etc e assim por diante.
5 - Otimizando o source
A unica vantagem que vejo em compilar programas, é poder otimizar o source para o seu processador. Por exemplo, os programas que vc instala através do apt-get, vem compilados em i386, ou seja, sem otimização nenhuma. Do urpmi da Mandriva, vem compilados para a arquitetura i586. Para fazer isso, vc deve setar as variaveis CFLAGS CXXFLAGS E CHOST
Exemplo, toda vez que eu compilar um programa, antes de executar o configure eu digito no terminal ( para otimizar para o meu Sempron 2200 ):
CFLAGS="-march=athlon-4 -pipe -O3 -fomit-frame-pointer"
CXXFLAGS=$CFLAGS
CHOST="i686-pc-linux-gnu"
export CFLAGS CXXFLAGS CHOST
Essas variaveis, o ./configure irá pegar o valor, colocará no Makefile, e na hora que vc executar o make , ele irá passar esses valores para os compiladores.
Importante, se vc errar, digitar algum valor errado, o configure retornará erro.
Se você não sabe quais valores colocar para seu processador, procure em http://gentoo-wiki.com/Safe_Cflags que contém uma extensa lista de valores para CFLAGS, é só procurar seu processador.
Outra coisa importante, um programa compilado para Pentium 4 não rodará em um Pentium 3, um programa compilado para atlhon não rodará num Pentium e por ai vai.
Conclusões
Espero com esse tutorial ajudar os iniciantes nessa parte tão chata de compilar programas. Mas vale lembrar, que a maioria dos programas que vc baixa na NET vc pode encontrar facilmente no apt-get, urpmi, yum, pacman, etc.
Gente, se alguem tiver alguma contribuição, me passe, pra poder colocar no tutorial.
Abraços
Ha, desculpem os erros de português.