sábado, 5 de junho de 2010

Compilar programas em C no ubuntu

Olás novamente.

Neste artigo, ensinarei como compilar e otimizar seus programas em C no ubuntu. Este artigo é útil para aqueles que estão começando a aprender a programar e precisam de uma luz quanto a compilação de programas. O compilador a ser usado será o gcc.

Primeiramente, criemos nosso teste.c.

#include
void main(){
printf("Teste");
}


Ok. Salve-o como teste.c e vamos compilar.
Na linha de comando, vamos criar o objeto do nosso programa.
gcc -c teste.c

Observa-se que é criado o arquivo teste.o. Vamos usá-lo agora para criar nosso arquivo executável.
gcc teste.o -o teste

Ou seja, estamos gerando o arquivo executável teste a partir de um arquivo objeto teste.o. Simples não?

Agora, basta executarmos.
./teste

Aparecerá no terminal a palavra "Teste".

Para facilitar a vida de quem está compilando, existem os chamados makefiles, que são arquivos que faz todo esse trabalho pra você. Posteriormente vou explicar como fazer um deles.

um abraço :)


3 comentários:

  1. Obrigado véy..
    eu ñ sabia que era tão fácil; :D

    ResponderExcluir
  2. Quase isso. Só que o código do exemplo não é um programa em C devidamente formatado.

    Num programa em C, main deveria ser declarada como int main(void) ou int main(int argc, char **argv).

    Além disso, a diretiva #include precisa de um argumento. No caso, deveria ter sido escrita como #include <stdio.h> (acredito que você tenha feito isso, e o Blogger a confundiu com uma tag HTML por causa dos delimitadores "<" e ">", mas cabe a você, de todo modo, verificar como ficou a sua postagem depois de a postar).

    ResponderExcluir
  3. Outro ponto que acho relevante comentar é a forma indicada de gerar o executável a partir do programa fonte.

    Um primeiro aspecto é que eu considero sempre útil habilitar o máximo de diagnósticos de possíveis erros por parte do compilador. No caso do GCC, eu sempre recomendo as opções "-Wall -Werror -O2 -pedantic". Com elas, os erros que indiquei acima teriam sido apontados prontamente, por exemplo.

    É bom e instrutivo que se tenha comentado sobre a geração de arquivos com código objeto. Entretanto, a real utilidade de manter arquivos objetos em disco não está na compilação de pequenos programas manualmente, pela linha de comando. Eles são mais importantes em programas de maior porte, nos quais diferentes partes ou módulos do programa são armazenados em arquivos separados e que podem ser compilados separadamente, de modo que uma alteração do código de uma determinada parte não implique necessariamente ter de recompilar todas as outras partes que não são afetadas pela tal alteração.

    O objetivo é economizar tempo de compilação, e sobretudo de recompilação, durante as etapas de desenvolvimento e manutenção do ciclo de vida do programa. Para isso, normalmente se tem também algum mecanismo de automatização da geração do programa, como Makefiles, arquivos de "projeto" (oferecidos por alguns ambientes de desenvolvimento) ou mecanismos equivalentes. Para programas pequenos, manualmente compilados, separar as etapas da geração do executável faz, na prática, com que se perca tempo, em lugar de o ganhar.

    ResponderExcluir