¿Por qué el archivo cmake GLOB es malvado?

Resuelto Joachim W asked hace 8 años • 4 respuestas

El documento de CMake dice sobre el archivo de comando GLOB :

No recomendamos utilizar GLOB para recopilar una lista de archivos fuente de su árbol de fuentes. Si ningún archivo CMakeLists.txt cambia cuando se agrega o elimina una fuente, entonces el sistema de compilación generado no puede saber cuándo pedirle a CMake que se regenere.

Varios hilos de discusión en la web afirman que distribuir archivos fuente es malo.

Sin embargo, para que el sistema de compilación sepa que se ha agregado o eliminado una fuente, es suficiente decir

touch CMakeLists.txt

¿Bien?

Entonces eso es menos esfuerzo que editar CMakeLists.txtpara insertar o eliminar un nombre de archivo fuente. Tampoco es más difícil de recordar. Así que no veo ninguna buena razón para desaconsejarlo file GLOB.

¿Qué hay de malo en este argumento?

Joachim W avatar Sep 05 '15 17:09 Joachim W
Aceptado

El problema es cuando no estás solo trabajando en un proyecto.

Digamos que el proyecto tiene los desarrolladores A y B.

A agrega un nuevo archivo fuente x.c. No cambia CMakeLists.txty se compromete una vez que termina de implementar x.c.

Ahora B hace un git pull, y como no ha habido modificaciones en el CMakeLists.txt, CMake no se ejecuta nuevamente y B causa errores del vinculador al compilar, porque x.cno se ha agregado a su lista de archivos fuente.

Edición de 2020: CMake 3.12 introduce el CONFIGURE_DEPENDSargumento file(GLOBque realiza el análisis global en busca de archivos nuevos: https://cmake.org/cmake/help/v3.12/command/file.html#filesystem

Sin embargo, esto no es portátil (ya que las soluciones Visual Studio o Xcode no admiten la función), así que utilícelo solo como una primera aproximación, de lo contrario, otras personas pueden tener problemas para compilar sus archivos CMake en el IDE de su elección.

Jean-Michaël Celerier avatar Sep 05 '2015 10:09 Jean-Michaël Celerier

No es intrínsecamente malo: tiene ventajas y desventajas, que se tratan relativamente bien en esta respuesta aquí en StackOverflow. Pero si lo usas descuidadamente, podrías terminar ignorando los cambios de dependencia y requiriendo reconstrucciones limpias de grandes partes de tu código base.

Personalmente, estoy a favor de usarlo (en proyectos más pequeños o en ciertos subdirectorios en proyectos más grandes) para evitar tener que ingresar cada archivo manualmente en los archivos de compilación. Editar: Mi preferencia ha cambiado y actualmente tiendo a evitarlo.

einpoklum avatar Feb 15 '2016 22:02 einpoklum