por exemplo, se você deseja compilar fontes, mas possui objetos em um diretório diferente:
Você precisa fazer :
gcc -c -o <obj/1.o> <srcs/1.c> <obj/2.o> <srcs/2.c> ...
mas com a maioria das macros, o resultado será todos os objetos seguidos por todas as fontes, como:
gcc -c -o <all OBJ path> <all SRC path>
portanto, isso não compilará nada ^^ e você não poderá colocar seus arquivos de objetos em um diretório diferente :(
a solução é usar essas macros especiais
$@ $<
isso gerará um arquivo .o (obj / file.o) para cada arquivo .c no SRC (src / file.c)
$(OBJ):$(SRC)
gcc -c -o $@ $< $(HEADERS) $(FLAGS)
Isso significa :
$@ = $(OBJ)
$< = $(SRC)
mas linhas por linhas, em vez de todas as linhas de OBJ, seguidas por todas as linhas de SRC