Makefile - Recompilação

o makeO programa é um utilitário inteligente e funciona com base nas alterações que você faz nos arquivos de origem. Se você tiver quatro arquivos main.cpp, hello.cpp, factorial.cpp e functions.h, todos os arquivos restantes serão dependentes de functions.h, e main.cpp será dependente de hello.cpp e factorial.cpp. Portanto, se você fizer alguma alteração em functions.h, então omakerecompila todos os arquivos de origem para gerar novos arquivos de objeto. No entanto, se você fizer qualquer alteração em main.cpp, já que ele não depende de nenhum outro arquivo, apenas o arquivo main.cpp é recompilado, e help.cpp e factorial.cpp não são.

Ao compilar um arquivo, o makeverifica seu arquivo de objeto e compara os carimbos de hora. Se o arquivo de origem tiver um registro de data e hora mais recente do que o arquivo de objeto, ele gerará um novo arquivo de objeto, assumindo que o arquivo de origem foi alterado.

Evitando recompilação

Pode haver um projeto que consiste em milhares de arquivos. Às vezes, você pode ter alterado um arquivo de origem, mas pode não querer recompilar todos os arquivos que dependem dele. Por exemplo, suponha que você adicione uma macro ou uma declaração a um arquivo de cabeçalho, do qual os outros arquivos dependem. Sendo conservador,make assume que qualquer mudança no arquivo de cabeçalho requer a recompilação de todos os arquivos dependentes, mas você sabe que eles não precisam ser recompilados e você prefere não perder seu tempo esperando que eles sejam compilados.

Se você antecipar o problema antes de alterar o arquivo de cabeçalho, pode usar a opção `-t '. Esta bandeira dizmakenão para executar os comandos nas regras, mas sim para marcar o destino atualizado, alterando sua data de última modificação. Você precisa seguir este procedimento -

  • Use o comando `make 'para recompilar os arquivos fonte que realmente precisam de recompilação.

  • Faça as alterações nos arquivos de cabeçalho.

  • Use o comando `make -t 'para marcar todos os arquivos objeto como atualizados. Na próxima vez que você executar o make, as alterações nos arquivos de cabeçalho não causarão nenhuma recompilação.

Se você já alterou o arquivo de cabeçalho em um momento em que alguns arquivos precisam ser recompilados, é tarde demais para fazer isso. Em vez disso, você pode usar o sinalizador `-o file ', que marca um arquivo especificado como" antigo ". Isso significa que o próprio arquivo não será refeito e nada mais será refeito por sua conta. você precisa seguir este procedimento -

  • Recompile os arquivos fonte que precisam de compilação por razões independentes do arquivo de cabeçalho particular, com `make -o header file '. Se vários arquivos de cabeçalho estiverem envolvidos, use uma opção `-o 'separada para cada arquivo de cabeçalho.

  • Atualize todos os arquivos de objetos com `make -t '.