9 pontos por regentag 2024-11-05 | 10 comentários | Compartilhar no WhatsApp

O CMake parece cada vez mais uma solução ruim para C++. Além de não atender às necessidades dos desenvolvedores de C++, ele nos mantém na era das trevas de construir makefiles de uma forma muito pouco clara e sem estrutura, com uma linguagem inconsistente.

Problema

No mundo de builds em C++, existem dois tipos de problemas.

  1. problemas que projetos existentes criam para si mesmos
  2. problemas enfrentados ao escolher um novo projeto em C++

O CMake tenta resolver o primeiro problema e falha completamente em resolver o segundo. Mas, por não tentar resolver esses problemas, ele se torna uma ferramenta menos útil.

O CMake quer ser um tradutor que converte a definição do projeto em um sistema de build, e falhou gravemente nisso. É uma linguagem ruim para definição de projetos, inconsistente e nada intuitiva.

Toda a comunidade de C++ agora fala sobre as ferramentas de Rust. Isso porque o Cargo realmente faz aquilo de que a maioria dos desenvolvedores acha que precisa. O Cargo baixa dependências da internet para criar toolkits isolados (uma má ideia) e fornece bibliotecas com linkagem estática (também uma má ideia). As pessoas não precisam de ferramentas que adicionem falhas de segurança em um ritmo enorme, mas o que o Cargo realmente oferece é necessário:

  1. uma estrutura de projeto muito rígida
  2. um sistema de configuração muito simples que depende de servidores externos para resolver o problema de onde as bibliotecas estão
  3. um único conjunto de ferramentas.

As pessoas na verdade precisam de menos liberdade, para poder se concentrar no trabalho, e não são boas em invocar o compilador da forma mais perfeita possível.

Solução

Ainda não há solução. Estou escrevendo o klb no meu tempo livre, mas por enquanto isso não é uma solução. (É preciso tempo e dinheiro.)

Mas está claro do que as pessoas precisam: menos opções, não mais. Menos opções significa menos maneiras de estragar a compilação de um projeto.

O CMake ainda é a melhor opção no mundo do C++ neste momento, mas também foi a pior coisa que aconteceu com C++ nos últimos 20 anos. Todo o resto está melhorando, mas os sistemas de build só estão piorando.

10 comentários

 
bobcat 2024-11-06

A sintaxe é meio feia, mas não encontrei nada tão bom quanto o CMake.
Fazer algo como M4 rodar em um ambiente não POSIX dá dor de cabeça.
Como eu já não gosto, desde o princípio, de um monte de coisas penduradas no ambiente de build, acabo nem me interessando por coisas como meson ou scone; e o premake parece ter alguma coisa faltando, então no fim acabo usando CMake, sem inventar muito, só para definir o código da forma mais simples possível.

 
haven04 2024-11-05

Uso o CMake há muito tempo, sempre reclamando dele, mas no fim das contas realmente não existe nada à altura. O Bazel é um inferno mesmo... Se eu fosse começar um projeto novo, acho que consideraria o Meson.

 
cherrycoder 2024-11-05

E o Meson ou o Bazel?

 
regentag 2024-11-05

Eu não sei muito bem, porque nunca usei nenhum dos dois...
Pessoalmente, gosto do gprbuild para projetos pequenos, então estou usando ele.

 
joonhwan 2024-11-05

Além do CMake, os outros métodos também são igualmente complicados
Pelo menos em termos de cross-platform.....

 
regentag 2024-11-05

Por isso o Visual Studio parece ser popular. Dá para começar a programar imediatamente.
Mas, se for entrar nos detalhes, isso também não tem fim.

 
secret3056 2024-11-05

Só de ver o CMake já me dá ânsia...

 
kayws426 2024-11-06

Acho que faz sentido pensar que o CMake não é um substituto do make, e sim do autotools (automake).

 
regentag 2024-11-05

Mesmo assim, ainda parece melhor do que simplesmente um Makefile.
No mês passado, tive que analisar um ambiente de build composto por vários Makefiles todos emaranhados com scripts de shell, Perl, variáveis de ambiente do sistema operacional e outras coisas aqui e ali, e foi de enlouquecer mesmo.

 
kayws426 2024-11-05

Se você tentar fazer algo detalhadamente, acaba entrando em um buraco de coelho...