9 puntos por regentag 2024-11-05 | 10 comentarios | Compartir por WhatsApp

Cada vez siento más que CMake es una mala solución para C++. No solo no responde a las necesidades de los desarrolladores de C++, sino que además nos mantiene en una era oscura de construcción de makefile de una forma muy poco clara y desestructurada, con un lenguaje inconsistente.

El problema

En el mundo de la compilación de C++ hay dos tipos de problemas.

  1. Los problemas que los proyectos existentes se crean por sí mismos (nota del traductor: el problema de compilar proyectos grandes ya existentes)
  2. Los problemas que se enfrentan al elegir un proyecto nuevo en C++

CMake intenta resolver el primer problema, y no resuelve en absoluto el segundo. Pero al no intentar resolver estos problemas, termina siendo una herramienta menos útil.

CMake quiere ser un traductor que convierta la definición de un proyecto en un sistema de compilación, y en esa parte ha fracasado de forma estrepitosa. Es un mal lenguaje de definición de proyectos; es inconsistente y poco intuitivo.

Ahora toda la comunidad de C++ habla de las herramientas de Rust. Eso es porque Cargo sí hace lo que la mayoría de los desarrolladores creen necesitar. Cargo descarga dependencias desde internet para crear un toolkit aislado (mala idea) y ofrece bibliotecas enlazadas estáticamente (también mala idea). La gente no necesita una herramienta que agregue agujeros de seguridad a una velocidad tremenda (nota del traductor: el autor sostiene que la forma en que Cargo trae automáticamente código desde internet y lo enlaza crea vulnerabilidades de seguridad, como ataques a la cadena de suministro. Véase I Hate Rust)., pero lo que Cargo sí ofrece es necesario:

  1. Una estructura de proyecto muy estricta
  2. Un sistema de configuración muy simple que depende de un servidor externo para resolver el problema de dónde están las bibliotecas
  3. Un solo conjunto de herramientas.

La gente en realidad necesita menos libertad para poder concentrarse en el trabajo, y no es buena invocando el compilador de la manera más perfecta posible.

La solución

Todavía no hay una solución. Estoy escribiendo klb en mi tiempo libre, pero por ahora no es la solución. (Hace falta tiempo y dinero.)

Pero está claro qué es lo que la gente necesita: menos opciones, no más. Menos opciones significa menos formas de arruinar la compilación de un proyecto.

CMake sigue siendo la mejor opción en el mundo de C++ en este momento, pero también ha sido la peor cosa que le ha pasado a C++ en los últimos 20 años. Todo lo demás mejora, pero los sistemas de compilación solo empeoran.

10 comentarios

 
bobcat 2024-11-06

La sintaxis es un poco sucia, pero no he encontrado nada mejor que CMake.
Intentar correr algo como M4 en un entorno que no sea POSIX te hace doler la cabeza.
Como de entrada no me gusta que el entorno de build venga con mil cosas colgando, no me llaman mucho meson ni scone, y premake se siente como si le faltara algo, así que termino usando CMake, sin pedir más, definiendo el código de la forma más simple posible.

 
haven04 2024-11-05

Llevo mucho tiempo usando CMake mientras lo critico, pero la verdad es que no hay nada que lo iguale. Bazel sí es un verdadero infierno... Si fuera a empezar un proyecto nuevo, creo que consideraría Meson.

 
cherrycoder 2024-11-05

¿Qué tal Meson o Bazel?

 
regentag 2024-11-05

La verdad no sé mucho porque no he usado ninguno de los dos...
En lo personal, para proyectos pequeños me gusta gprbuild, así que lo estoy usando.

 
joonhwan 2024-11-05

Aparte de CMake, los demás métodos también son igual de complejos
Al menos en multiplataforma.....

 
regentag 2024-11-05

Por eso parece que Visual Studio es popular. Puedes empezar a programar de inmediato.
Aunque, si te pones a profundizar en esto también, no tiene fin.

 
secret3056 2024-11-05

Con solo ver CMake, me dan ganas de vomitar...

 
kayws426 2024-11-06

Creo que conviene pensar que CMake no es un reemplazo de make, sino de autotools (automake).

 
regentag 2024-11-05

Aun así, quizá sigue siendo mejor que un simple Makefile.
El mes pasado tuve que analizar un entorno de compilación compuesto por varios Makefile enredados con scripts de shell, Perl, variables de entorno del sistema operativo y demás, y de verdad era para volverse loco.

 
kayws426 2024-11-05

Si intentas hacer algo muy detallado, terminas cayendo en una madriguera de conejo...