Estou simplesmente estudando make. E me deparo com a pergunta sobre o arquivo intermediário de remoção automática do make. Eu gostaria de prever melhor como o make marcaria o arquivo intermediário (ou seja, responderia "Removê-lo automaticamente?"), Então escrevi um projeto fictício como este para demonstrar minha pergunta:
olá.h
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif
olá.c
#include <stdio.h>
void hello(const char *name) {
printf("Hello %s\n", name);
}
main.c
#include "hello.h"
int main() {
hello("world");
return 0;
}
makefile
all: main
./main
clean:
rm -f *.o *.a
rm -f main
hello.o:
gcc -c hello.c
libmyhello.a: hello.o
ar -crv $@ hello.o
main: libmyhello.a
gcc -L. -o $@ [email protected] -lmyhello
.PHONY: all clean
Quando eu faço main
, requer libmyhello.a
. libmyhello.a
requer hello.o
. Se bem entendi, hello.o
deve ser um arquivo intermediário. Mas não foi excluído no make main
processo.
Por que é? Como saber se o make irá tratar um arquivo como arquivo intermediário e removê-lo?