Trabalho em c ++ principalmente como hobby (ainda estou na escola e, portanto, não tenho um emprego de verdade). Os IDEs geram o makefile para mim e, por isso, estou me perguntando se vale a pena aprender como fazê-los eu mesmo. Por "vale a pena aprender", quero dizer, devo largar tudo e aprender a escrevê-los antes de continuar aprendendo c ++? Aprendê-los será realmente necessário? Se sim, devo aprender sobre eles (sintaxe geral e entender como eles funcionam etc.) ou realmente aprender a escrevê-los?
12
Respostas:
Sim, definitivamente vale a pena entender como os Makefiles funcionam. Pode não ser relevante para você agora (porque você está usando um IDE que os gera), mas as chances são de que o conhecimento seja útil no futuro.
Francamente, essa é uma noção bizarra de "vale a pena aprender" ...
Mas não, acho que você não precisa fazer isso.
Não podemos prever se você realmente precisará desse conhecimento no futuro. Depende se você continua com a programação C ++ e em qual contexto você o faz.
Eu recomendaria ambos. Se você não pode escrever um Makefile, é discutível que você saiba o que está acontecendo.
Há outro ponto de vista que diz que muito conhecimento não é útil.
Se você se aprofundar nisso, aprenderá que existem muitas versões diferentes do Make, e que é difícil escrever um Makefile complicado que funcione com várias versões do Make em várias plataformas. No entanto, no mundo do código aberto, é "melhor prática" usar ferramentas como
automake
,autoconf
etc., para gerar os makefiles etc. Se você fizer isso, grande parte da complexidade relacionada à versão / plataforma será tratada nos bastidores. .Por fim, você marcou a pergunta com "java". Minha opinião é que você não deve usar
make
para criar aplicativos Java (a menos que esteja construindo bibliotecas de código nativas também). Existem ferramentas de construção específicas para Java que são muito mais fáceis de usar ... e fazem um trabalho melhor quemake
.fonte
Se você estiver trabalhando com sistemas operacionais de código aberto ou similares ao Unix, sim. No entanto, tenha coragem, eles não são tão complicados. O aprendizado
make
poupará muito tempo a longo prazo.fonte
Makefiles são importantes nos sistemas UNIX (por exemplo, AIX, Linux, OS X). No entanto, acho que sua importância absoluta "você precisa saber" diminuiu nos últimos anos. Por exemplo, você realmente não os encontra no desenvolvimento do Windows (Visual Studio, etc.) e o XCode (no OS X) usa um sistema completamente diferente. Eu não gosto muito de Java, mas acho que eles usam arquivos form e outros enfeites.
Existe um sistema muito interessante chamado CMake que gera arquivos de compilação nativos para o sistema operacional em que você está executando. Por exemplo, se você escrever sua especificação de projeto no CMake, poderá criar um projeto de criação do Visual Studio no Windows, um projeto XCode no Mac e um Makefile no Linux. De certa forma, o CMake substitui o autoconf e o automake.
Normalmente, eu crio arquivos do CMake para meus "grandes projetos", mas conheço o Make, caso queira escrever um Makefile rápido "apenas conclua". É bom para sua alfabetização cultural, porque existem inúmeras bibliotecas de software que usam Makefiles, e você inevitavelmente precisará editar os compiladores e os locais das bibliotecas específicos. Mas você descobrirá que grandes projetos (como o KDE) estão migrando para o CMake e similares, já que o Make tem algumas limitações que criam sua cabeça feia quando os projetos se complicam.
fonte
Eu sou preconceituosa, pois acho que os makefiles são um sistema terrível. Você deve aprender a sintaxe geral para modificar um makefile existente. Mas acho que não é útil aprender tudo sobre isso nem criar um a partir do zero.
fonte
Como em muitos aspectos da saída do IDE, um makefile típico gerado automaticamente é frequentemente ineficientemente estruturado.
Com um nível adequado de entendimento, geralmente é possível melhorar significativamente o desempenho (compilações mais rápidas, etc.). No entanto, a menos que você realmente saiba o que está acontecendo, é mais provável que você FUBAR ao brincar com um arquivo editado automaticamente.
Eu recomendo ser capaz de entender o que está acontecendo ... se você optar por começar a editar um já existente ou criar o seu, é um problema separado.
fonte
Ser capaz de usar com êxito
make
ou algo do tipo permite verificar a caixa "entende como modelar as dependências entre partes de um programa composto por mais de um módulo".fonte
Aprender a escrever Makefiles é uma boa idéia por várias razões.
fonte
Você deve sempre tentar entender o sistema de construção que está usando.
Isso não significa necessariamente que você precise criar todos os arquivos de compilação manualmente. A parte importante é entender o que o sistema de compilação está fazendo para o seu projeto e a capacidade geral de compilar pequenos projetos manualmente (como em "digitando comandos em um terminal").
Costumo pensar que criar Makefiles (simples) é o passo mais fácil para entender o que está acontecendo, mas você pode ter outros meios de entender como criar coisas.
Por que / quando aprender Makefiles
Se você mantém a programação apenas para Windows e não espera que mais ninguém compile seu código, sinta-se à vontade para compilar o código como desejar.
Se você deseja programar o agnóstico do compilador (como em "deixe outros decidirem qual compilador ou IDE eles querem usar"), você deve aprender outro sistema de compilação do que apenas deixar o IDE "lidar com ele".
Se você deseja programar para diferentes plataformas, certamente precisará usar um sistema de compilação generalizado.
Isso ainda não significa que você precisa saber como os Makefiles gerados automaticamente funcionam em detalhes. Você só precisa saber como os arquivos de entrada para o sistema de construção funcionam. Às vezes, eles têm uma sintaxe semelhante.
Pessoalmente, gosto muito de Makefiles e os uso para muitas coisas. Não apenas compilando código. Eu crio um Makefile para cada pdf maior que eu criar (com LaTeX) e para cada projeto que eu preciso para automatizar algumas tarefas (construção, empacotamento, upload, atualização de dependências de repositórios de origem, backups manuais pull / push)
No entanto, estou trabalhando muito no terminal e trabalhando com o Linux. Não uso o que você chamaria de um IDE que não seja o vim (poderoso editor de texto) e as ferramentas de console. Isso pode ser muito diferente para você.
Se você já se queixou de ter que executar diferentes comandos recorrentes apenas para "atualizar" / package / upload / .. um "projeto", aprender como escrever Makefiles pode ser algo útil para você.
Se você possui e utiliza ferramentas / GUIs / IDEs para tudo, pode não obter nada com esse conhecimento.
fonte