Skip to content

Compreendendo o Comando Unix e Linux: make

4 de abril de 2021

O utilitário make determina automaticamente quais partes de um programa grande precisam ser recompiladas e emite os comandos para recompilá-las. O manual descreve a implementação GNU do make, que foi escrito por Richard Stallman e Roland McGrath. O utilitário make não está limitado a programas. Você pode usá-lo para descrever qualquer tarefa em que alguns arquivos devam ser atualizados automaticamente a partir de outros, sempre que os outros forem alterados. O comando make é mais comumente usado em um processo comum para construir software a partir de seu código-fonte.

lina aidukaite / Moment / Getty Images

Como usar o comando Make no Linux

Este é um exemplo comum de como usar o comando make no Linux. Normalmente, é parte de um processo simples de três etapas para construir aplicativos de código aberto a partir de seu código-fonte. Esses exemplos mostram programas C, já que são os mais comuns, mas você pode usar make com qualquer linguagem de programação que possa executar seu compilador com um comando shell.

  1. Instale o Git, se não o tiver, junto com as ferramentas de construção de software. apt install git build-essential

  2. Escolha um aplicativo para trabalhar ou baixe o VLC. apt build-dep vlc

  3. Clone o código-fonte do VLC. git clone https://github.com/videolan/vlc.git

  4. Altere os diretórios para o código-fonte do VLC clonado e execute o script de configuração. cd vlc
    ./bootstrap
    ./configure

  5. Execute o fazer comando junto com o -j sinalizador, seguido pelo número de núcleos / threads de CPU que seu sistema possui. make -j4

  6. Isso levará algum tempo para ser concluído. Quando terminar, instale o aplicativo com faça a instalação. sudo make install

  7. Voce terminou.

Na maioria das vezes, é assim que você verá o comando make usado. Pode haver procedimentos mais complexos do que este ou pequenas variações, mas nunca é muito complexo.

Como funciona o comando GNU Make?

A seção abaixo é uma análise técnica do comando make. Se você deseja aproveitar ao máximo o make, consulte as opções abaixo. Esta página é um extrato da documentação do GNU make. Ele é atualizado apenas ocasionalmente porque o projeto GNU não usa nroff. Para obter a documentação completa e atual, consulte o arquivo de informações make.info que é feito a partir do arquivo fonte Texinfo make.texinfo.

Sintaxe e preparação do utilitário make

A sintaxe do utilitário make é fazer -f makefile ] [ option ] … alvo … Para se preparar para usar o make, você deve escrever um arquivo chamado de makefile que descreve as relações entre os arquivos em seu programa e declara os comandos para atualizar cada arquivo. Normalmente, um arquivo executável é atualizado a partir de arquivos-objeto, que, por sua vez, são feitos pela compilação de arquivos-fonte. Uma vez que um makefile adequado existe, cada vez que você muda alguns arquivos de origem, o comando shell fazer é suficiente para realizar todas as recompilações necessárias. O programa make usa o banco de dados makefile e os horários da última modificação dos arquivos para decidir quais arquivos precisam ser atualizados. Para cada um desses arquivos, ele emite os comandos registrados no banco de dados. O utilitário make executa comandos no makefile para atualizar um ou mais nomes de destino, onde nome normalmente é um programa. Se não -f opção estiver presente, procure os makefiles GNUmakefile, makefile, e Makefile, naquela ordem. Normalmente você deve chamar o makefile também makefile ou Makefile. (É recomendado que você use Makefile porque aparece de forma proeminente perto do início de uma lista de diretórios, perto de outros arquivos importantes como README.) O primeiro nome verificado, GNUmakefile, não é recomendado para a maioria dos makefiles. Use este nome apenas se um makefile for específico do GNU make e não for compreendido por outras versões do make. Se makefile for , a entrada padrão é lida. O fazer O utilitário atualiza um destino se ele depender de arquivos de pré-requisito que foram modificados desde a última modificação do destino ou se o destino não existir.

Opções para o utilitário Make

O -b e -m opções são ignoradas para compatibilidade com outras versões do make.

-C dir muda para o diretório dir antes de ler os makefiles ou fazer qualquer outra coisa. Se múltiplo -C opções são especificadas, cada uma é interpretada em relação à anterior: -C / -C etc é equivalente a -C / etc. Isso é normalmente usado com invocações recursivas de make. O -d opção imprime informações de depuração além do processamento normal. As informações de depuração indicam quais arquivos estão sendo considerados para refazer, quais tempos de arquivo estão sendo comparados e com quais resultados, quais arquivos precisam ser refeitos e quais regras implícitas são consideradas e quais são aplicadas. O -e opção dá variáveis ​​tiradas da precedência de ambiente sobre variáveis ​​de makefiles. O -f Arquivo opção usa Arquivo como um makefile. O -eu opção ignora todos os erros em comandos executados para refazer arquivos. O -EU dir opção especifica um diretório dir para pesquisar makefiles incluídos. Se vários –eu opções são usadas para especificar vários diretórios, os diretórios são pesquisados ​​na ordem especificada. Ao contrário dos argumentos para outras sinalizações de make, diretórios com -EU as bandeiras podem vir diretamente após a bandeira: -Idir é permitido, bem como -Eu dir. Esta sintaxe é permitida para compatibilidade com o pré-processador C -EU bandeira. O -j empregos opção especifica o número de trabalhos (comandos) a serem executados simultaneamente. Se houver mais de um -j opção, o último é eficaz. Se o -j opção é fornecida sem um argumento, make não limita o número de trabalhos executados simultaneamente. O -k opção continua tanto quanto possível após um erro. O alvo que falhou, e aqueles que dependem dele, não podem ser refeitos. No entanto, as outras dependências desses destinos podem ser processadas da mesma forma. O -eu e -l carregar opções especificam que nenhum novo trabalho (comandos) deve ser iniciado se houver outros trabalhos em execução, e a média de carga é de pelo menos carregar (um número de ponto flutuante). Sem nenhum argumento, ele remove um limite de carga anterior. O -n opção imprime os comandos que seriam executados, mas não os executa. O -o Arquivo opção não refaz o Arquivo mesmo que seja mais antigo do que suas dependências e não refaça nada por conta das mudanças no Arquivo. Essencialmente, o arquivo é tratado como antigo e suas regras são ignoradas. O -p opção imprime o banco de dados (regras e valores de variáveis) que resulta da leitura dos makefiles. Em seguida, ele é executado normalmente ou conforme especificado de outra forma. Isso também imprime as informações de versão fornecidas pelo -v interruptor (veja abaixo). Para imprimir o banco de dados sem tentar refazer nenhum arquivo, use fazer -p -f / dev / null.

O -q opção define o modo de pergunta. Ele não executa nenhum comando nem imprime nada. Ele retorna um status de saída que é zero se os destinos especificados estão atualizados, diferente de zero caso contrário. O -r opção elimina o uso das regras implícitas integradas. Ele também limpa a lista padrão de sufixos para regras de sufixo. O -s opção silencia a operação. Não imprime os comandos à medida que são executados. O -S opção cancela o efeito do -k opção. Isso não é necessário, exceto em um make recursivo Onde -k pode ser herdado do make de nível superior via MAKEFLAGS ou se você definir -k em MAKEFLAGS em seu ambiente. O -t opção toca arquivos (marca-os atualizados sem alterá-los) em vez de executar seus comandos. Isso é usado para fingir que os comandos foram executados, para enganar futuras invocações de make. O -v opção imprime a versão do programa make mais um copyright, uma lista de autores e um aviso de que não há garantia. O -C opção imprime uma mensagem contendo o diretório de trabalho antes e depois de outro processamento. Isso pode ser útil para encontrar erros de ninhos complicados de make recursivo comandos. O -C Arquivo opção finge que o alvo Arquivo foi modificado. Quando usado com o -n sinalizador, isso mostra o que aconteceria se você modificasse esse arquivo. Sem -n, é quase o mesmo que executar um toque no arquivo fornecido antes de executar o make, exceto que a hora de modificação é alterada apenas na imaginação do make.