La mejor manera de especificar archivos fuente en CMake es enumerándolos explícitamente .
Los propios creadores de CMake aconsejan no usar globbing.
Ver: https://cmake.org/cmake/help/v3.15/command/file.html?highlight=glob#file
(No recomendamos usar GLOB para recopilar una lista de archivos fuente de su árbol fuente. Si no cambia el archivo CMakeLists.txt cuando se agrega o elimina una fuente, el sistema de compilación generado no puede saber cuándo pedirle a CMake que se regenere).
Por supuesto, es posible que desee saber cuáles son las desventajas: ¡siga leyendo!
Cuando falla Globbing:
La gran desventaja de globbing es que crear / eliminar archivos no actualizará automáticamente el sistema de compilación.
Si usted es la persona que agrega los archivos, esto puede parecer una compensación aceptable, sin embargo, esto causa problemas a otras personas que construyen su código, actualizan el proyecto desde el control de versiones, ejecutan la compilación y luego se contactan con usted, quejándose de que
"la compilación es roto".
Para empeorar las cosas, la falla generalmente produce algún error de vinculación que no da ninguna pista sobre la causa del problema y se pierde tiempo para solucionarlo.
En un proyecto en el que trabajé, comenzamos a englobar, pero recibimos tantas quejas cuando se agregaron nuevos archivos, que fue una razón suficiente para enumerar explícitamente los archivos en lugar de glob.
Esto también rompe los flujos de trabajo comunes de git
( git bisect
y el cambio entre ramas de características).
Por lo tanto, no podría recomendar esto, los problemas que causa superan con creces la conveniencia, cuando alguien no puede construir su software debido a esto, puede perder mucho tiempo para rastrear el problema o simplemente darse por vencido.
Y otra nota, solo recordar tocar CMakeLists.txt
no siempre es suficiente, con las compilaciones automatizadas que usan globbing, tuve que ejecutar cmake
antes de cada compilación ya que los archivos podrían haberse agregado / eliminado desde la última compilación *.
Excepciones a la regla:
Hay momentos en que es preferible el pegadizo:
- Para configurar
CMakeLists.txt
archivos para proyectos existentes que no usan CMake.
Es una forma rápida de obtener toda la fuente referenciada (una vez que el sistema de compilación se está ejecutando, reemplace globbing con listas de archivos explícitas).
- Cuando CMake no se utiliza como el sistema de compilación principal , si, por ejemplo, está utilizando un proyecto que no está utilizando CMake y desea mantener su propio sistema de compilación para él.
- Para cualquier situación en la que la lista de archivos cambia con tanta frecuencia que resulta poco práctico mantenerla. En este caso, podría ser útil, pero luego debe aceptar la ejecución
cmake
para generar archivos de compilación cada vez para obtener una compilación confiable / correcta (lo que va en contra de la intención de CMake: la capacidad de dividir la configuración de la compilación ) .
* Sí, podría haber escrito un código para comparar el árbol de archivos en el disco antes y después de una actualización, pero esta no es una buena solución y algo mejor le queda al sistema de compilación.