On Mon, Feb 11, 2019 at 04:42:33AM -0800, Introscopia wrote:
>Essas makefiles são o que exatamente? É alguma linguagem, ou é só uns
>protocolos do compilador mesmo?
No início, existiam os compiladores. O problema é que os programas
foram crescendo e dava muito trabalho compilar cada arquivo na mão. Aí
criaram os Makefiles para automatizar essa parte.
O make lê arquivos Makefile que são uma linguagem sim, mas uma linguagem
declarativa com regras de como compilar o seu programa. Muita gente
acha que é shell script mas, apesar de ter shell script embutido, ele é
uma linguagem própria. Por exemplo:
hello_world: hello_world.c
gcc -o $@ $<
Será compilado o programa "hello_world" tendo como referência o arquivo
"hello_world.c".
Aí você me pergunta: por que não um shell script comum? A grande
vantagem está para projetos mais grandes, pois o *target* (no caso,
"hello_world") só será compilado novamente se os sources (no caso,
"hello_world.c") for modificado, senão ele não compila novamente. Ele
faz isso comparando o tempo de modificação do target com o source.
Imagina se você tem um software com mil, dez mil targets e a cada vez
que você chama o make ele compila tudo de novo... Mas os Makefiles tem
muito mais recursos do que esse que eu mostrei acima (um dos que eu acho
mais úteis, por exemplo, é a possibilidade de construir targets em
paralelo).
Até dá pra fazer a mesma coisa com shell script (compilar somente o que
é necessário), mas daria bastante trabalho.
Conforme foi passando o tempo as aplicações e sistemas operacionais
foram ficando ainda mais complexos e hoje é pouco comum que um Makefile
seja escrito "na mão" para projetos muito grandes. Normalmente se usa
geradores de Makefiles com GNU automake (junto com GNu autoconf), CMake,
qmake, etc... tem vários.
Muitas IDEs acabam usando, por debaixo dos panos, Makefiles, shell
scripts, compiladores e depuradores que dá pra usar de maneira muito
mais simples pela linha de comando. A IDE pode ajudar, mas quando ela
se torna um obstáculo para o desenvolvimento, pode ser o momento de
voltar às origens e estudar as ferramentas básicas (a ideia é assim: não
adianta você tentar usar um torno mecânico CNC se não sabe colocar uma
broca numa furadeira...).
Tem vários tutoriais de Makefile na web. O último que eu vi é esse
aqui:
https://matthias-endler.de/2017/makefiles/ Não cheguei a lê-lo,
mas parece bom para iniciantes.