Makefile

Makefile

por Renato Cordeiro Ferreira -
Número de respostas: 2

Olá,

Estava olhando o makefile oferecido na nova versão do EP, e fiquei com algumas dúvidas:

Quando usava o makefile para compilar, geralmente escrevia comandos bem grandes nas linhas (gcc -Wall -ansi ...) repetidamente. Mas no makefile oferecido, vi que havia as opções CFLAGS= e CC=, repetidas posteriormente nas linhas de comandos na forma $(CC) e $(CFLAGS). Minha pergunta é: essas são opções padrão do makefile ou são variáveis, que podem ter qualquer nome?

A segunda pergunta é sobre a última linha "clean:". Os comandos colocados l, pelo que percebi, são os mesmos do bash, usando algumas expressões regulares (*.0) para apagar os .o da pasta. Novamente, o "clean" é específico do makefile ou poderíamos criar mais seções que executassem comandos de bash?

E uma última questão de brinde: uma vez, ao compilar um programa de C++ usando 'make', precisava também rodar um pequeno programa chamado 'config'. Para que serve esse tipo de executável? Lembro que o rodei como './config', então deveria ser alguma opção de implementação própria.

Agradeço pela ajuda

Em resposta à Renato Cordeiro Ferreira

Re: Makefile

por José Coelho de Pina -

Oi Renato,

essas são opções padrão do makefile ou são variáveis, que podem ter qualquer nome?

Sim, podem ser variáveis. Troque alguma delas por BLA e veja  que tudo continua a funcionar. Também dê uma olhada no tópico MakeFile criado pelo Claudio.

Make é um baita programa. Vocês podem ver o manual em http://www.gnu.org/software/make/manual/make.html

Há uma descrição das origens do make em Make (software). O cara que bolou o programa,  Stuart Feldman, esteve aqui no IME no ano passado dando umas palestras (fotos)

 

 

Em resposta à Renato Cordeiro Ferreira

Re: Makefile

por Luiz Armesto -

E uma última questão de brinde: uma vez, ao compilar um programa de C++ usando 'make', precisava também rodar um pequeno programa chamado 'config'. Para que serve esse tipo de executável? Lembro que o rodei como './config', então deveria ser alguma opção de implementação própria.

 

Normalmente existe um "./configure" que é um shell script criado com o autoconf (existe também um automake que junto com o autoconf ajuda a escrever makefiles mais complicados). Ele serve basicamente para verificar dependências e configurar os makefiles (eventualmente alguns cabeçalhos *.h ou outros arquivos) para serem compilados de acordo com a máquina onde está sendo rodando. O mais comum é ele avisar a falta de bibliotecas necessárias e ativar/desativar flags no makefile de acordo com caracteristicas do processador, do sistema operacional, de dependências opcionais não instaladas, adicionando ou excluindo, por exemplo, funcionalidades secundárias ou suporte a determinados tipos de arquivos, etc. Além de configurar onde o programa será instalado.