Em termos simples, você pode pensar em make como tendo um número (possivelmente grande) de etapas, em que cada etapa usa vários arquivos como entrada e cria um arquivo como saída.
Uma etapa pode ser "compilar file.c a file.o " ou "usar ld para vincular main.o e file.o a program ". Se você interromper make com Ctrl C , então a etapa atualmente em execução será terminada, o que irá (ou deverá) remover o arquivo de saída em que estava trabalhando. Geralmente, não há nenhum "binóculo incompleto" deixado para trás.
Quando você reinicia o make , ele irá ver os registros de data e hora de todos os arquivos de entrada e saída e executará novamente as etapas em que:
- um arquivo de entrada possui um registro de data e hora mais recente que o arquivo de saída
- o arquivo de saída não existe
Isso geralmente significa que se uma etapa levar muito tempo para ser executada (é raro em computadores modernos, mas a ld para programas grandes pode levar muitos minutos quando make foi criada), parando e reiniciando make iniciará esse passo desde o começo.
A realidade do seu Makefile médio é consideravelmente mais complicada do que a descrição acima, mas os fundamentos são os mesmos.