Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

gcc_linux [2009/02/18 17:26]
laureano
gcc_linux [2009/02/20 05:05] (atual)
laureano
Linha 1: Linha 1:
 ====== Compilando no Linux ====== ====== Compilando no Linux ======
  
 +===== GCC =====
  
 Compilar é transformar um arquivo legível para o homem (chamado de código-fonte, //source file// em inglês) para um arquivo legível para a máquina (binário, binary). Quem faz esse trabalho é o compilador.  Compilar é transformar um arquivo legível para o homem (chamado de código-fonte, //source file// em inglês) para um arquivo legível para a máquina (binário, binary). Quem faz esse trabalho é o compilador. 
  
-O compilador C/C++ padrão no Linux é o gcc. Muitas distribuições vêm o gcc incluído. O Compilador gcc é um dos compiladores mais versáteis e avançados existentes. O gcc suporta todos os padrões modernos do C atualmente usados, como o padrão ANSI C, assim como muitas extensões específicas do próprio gcc. Utilizar o gcc é simples. Vejamos alguns exemplos:+O compilador C/C++ padrão no Linux é o **''gcc''**. Muitas distribuições vêm o ''gcc'' incluído. O Compilador ''gcc'' é um dos compiladores mais versáteis e avançados existentes. O ''gcc'' suporta todos os padrões modernos do C atualmente usados, como o padrão //ANSI C//, assim como muitas extensões específicas do próprio ''gcc''. Utilizar o ''gcc'' é simples. Vejamos alguns exemplos:
  
-Compila o programa hello.c e cria o binário hello (opção ''–o'' do gcc)+Compila o programa ''hello.c'' e cria o binário ''hello'' (opção **''–o''** do ''gcc'')
  
-''$> gcc hello.c –o hello''+<code> 
 +gcc hello.c –o hello 
 +</code>
  
-Compila 2 programas (prog1.c e prog2.c) e cria o binário programa. +Compila 2 programas (''prog1.c'' ''prog2.c'') e cria o binário ''programa''
-$> gcc prog1.c prog2.c –oprograma+<code> 
 +gcc prog1.c prog2.c –oprograma 
 +</code>
  
-Compila o programa fat.c, gera o binário fat e indica para o compilador linkeditar a biblioteca matemática junto com binário (opção –l do gcc). +Compila o programa ''fat.c'', gera o binário ''fat'' e indica para o compilador linkeditar a biblioteca matemática junto com binário (opção **''–l''** do gcc). 
-$> gcc fat.c –o fat –lm+<code> 
 +gcc fat.c –o fat –lm 
 +</code>
  
-Compila o programa def.c, gera o binário def e cria a diretiva  PLATAFORMA (opção –D do gcc) com o valor Linux (veja o funcionamento no capítulo de Pré-compilação). +Compila o programa ''def.c'', gera o binário ''def'' e cria a diretiva ''PLATAFORMA'' (opção **''–D''** do ''gcc'') com o valor Linux (veja o funcionamento em [[pre_compilacao|Pré-compilação]]). 
-$> gcc def.c –DPLATAFORMA=Linux –odef+<code> 
 +gcc def.c –DPLATAFORMA=Linux –odef 
 +</code>
  
-Compila o programa inc.c, gera o binário inc. A opção –I indica o caminho para os includes (headers) do específicos do projeto e a opção –L indica o caminho das bibliotecas específicas do projeto. +Compila o programa ''inc.c'', gera o binário ''inc''. A opção **''–I''** indica o caminho para os ''includes'' (//headers//) do específicos do projeto e a opção **''–L''** indica o caminho das bibliotecas específicas do projeto. 
-$> gcc inc.c –I../includes –L../libs –lmylib –o../bin/inc +<code> 
 +gcc inc.c –I../includes –L../libs –lmylib –o../bin/inc  
 +</code>
  
-Compila o progr1.c e gera o binário progr1. A opção –O é para otimização do código gerado. +Compila o ''progr1.c'' e gera o binário ''progr1''. A opção **''–O''** é para otimização do código gerado. 
-$> gcc –O –oprogr1 progr1.c +<code> 
- +gcc –O –oprogr1 progr1.c 
-O libc (glibc) é uma biblioteca usada por quase todos os programas do Linuxo libjpeg é usada em todos os programas que trabalham com o formato JPEGe assim por diante. No sistema Linux essas bibliotecas são divididas em dois pacotes: um para ser usado por programas já compilados (glibc e libjpeg, por exemplo), e um para ser usado na compilação de programas que dependem dele (glibc-devel e libjpeg-devel, por exemplo). Portanto, para compilar programas mais complexos, será necessário ter esses dois pacotes instalados.+<;/code>;
  
 +O ''libc'' (''glibc'') é uma biblioteca usada por quase todos os programas do Linux; o ''libjpeg'' é usada em todos os programas que trabalham com o formato JPEG; e assim por diante. No sistema Linux essas bibliotecas são divididas em dois pacotes: um para ser usado por programas já compilados (''glibc'' e ''libjpeg'', por exemplo), e um para ser usado na compilação de programas que dependem dele (''glibc-devel'' e ''libjpeg-devel'', por exemplo). Portanto, para compilar programas mais complexos, será necessário ter esses dois pacotes instalados.
  
-Se o programa é constituído por vários arquivos, e normalmente usam bibliotecas e header-files externos, será necessário compilar todos eles e juntá-los (link) corretamente. Para automatizar esse procedimento, usa-se o comando make. Esse comando lê um arquivo chamado Makefile, onde estará o "roteironecessário para a compilação do programa. O objetivo básico do make é permitir que seja construído um programa em pequenas etapas. Se muitos arquivos fontes compuserem o executável final, será possível alterar um arquivo e reconstruir o executável sem ter a necessidade de compilar os demais programas. Para tal, é necessário criar um arquivo chamado Makefile. +===== Makefiles ===== 
 +Se o programa é constituído por vários arquivos, e normalmente usam bibliotecas e header-files externos, será necessário compilar todos eles e juntá-los (link) corretamente. Para automatizar esse procedimento, usa-se o comando **''make''**. Esse comando lê um arquivo chamado ****Makefile****, onde estará o //roteiro// necessário para a compilação do programa. O objetivo básico do ''make'' é permitir que seja construído um programa em pequenas etapas. Se muitos arquivos fontes compuserem o executável final, será possível alterar um arquivo e reconstruir o executável sem ter a necessidade de compilar os demais programas. Para tal, é necessário criar um arquivo chamado ''Makefile''
  
  
-O make pode ser composto de várias linhas, cada um indicando como o executável deve ser construído. Normalmente, existe dependências entre as linhas, indicado a ordem de execução das linhas. A disposição das linhas (entradas) dentro do arquivo Makefile não importa, pois o make irá descobrir qual a ordem correta. O make exige alguns cuidados para a criação do arquivo: +''make'' pode ser composto de várias linhas, cada um indicando como o executável deve ser construído. Normalmente, existe dependências entre as linhas, indicado a ordem de execução das linhas. A disposição das linhas (entradas) dentro do arquivo ''Makefile'' não importa, pois o ''make'' irá descobrir qual a ordem correta. O ''make'' exige alguns cuidados para a criação do arquivo: 
-Sempre colocar uma tabulação no começo de um comando, nunca espaços. Não deve ser utilizado uma tabulação antes de qualquer outra linha. +  * Sempre colocar uma tabulação no começo de um comando, nunca espaços. Não deve ser utilizado uma tabulação antes de qualquer outra linha. 
-O símbolo # (sustenido, tralha, cerquilha ou jogo da velha) indica uma comentário na linha. +  * O símbolo ''#'' (sustenido, tralha, cerquilha ou jogo da velha) indica uma comentário na linha. 
-Uma barra invertida no final de uma linha, indica que ela irá prosseguir na próxima linha. Ótimo para comandos longos.+  * Uma barra invertida no final de uma linha, indica que ela irá prosseguir na próxima linha. Ótimo para comandos longos.
  
 Vejamos um exemplo: Vejamos um exemplo:
Linha 82: Linha 95:
 </code> </code>
  
-Os comandos do arquivo Makefile acima, seriam equivalentes a aos seguintes comandos (se todos fossem digitados):+Os comandos do arquivo ''Makefile'' acima, seriam equivalentes a aos seguintes comandos (se todos fossem digitados):
  
 <code> <code>
Linha 100: Linha 113:
 </code> </code>
  
-Para maiores informações sobre a utilização e opções dos comandos gcc e make, veja o manual on-line (help) do sistema Linux.+Para maiores informações sobre a utilização e opções dos comandos ''gcc'' ''make'', veja o manual on-line (help) do sistema Linux.
  
gcc_linux.txt · Última modificação: 2009/02/20 05:05 por laureano
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0