Recientemente tuve motivos para trabajar con algunos proyectos de Visual Studio C++ con las configuraciones habituales de depuración y liberación, pero también 'Liberar todo' y 'Depurar todo', que nunca había visto antes.#incluye todos los archivos .cpp en una sola unidad de compilación?
Resulta que el autor de los proyectos tiene un único ALL.cpp que # incluye todos los demás archivos .cpp. * Todas las configuraciones solo compilan este archivo ALL.cpp. Por supuesto, está excluido de las configuraciones normales, y las configuraciones normales no compilan ALL.cpp
Me pregunto si esta es una práctica común. ¿Qué ventajas ofrece? (Mi primera reacción fue que olía mal.)
¿Qué tipo de escollos es probable que encuentres con esto? Uno en el que puedo pensar es si tienes espacios de nombres anónimos en tu .cpps, ya no son 'privados' para ese cpp, ¿pero ahora también están visibles en otros cpps?
Todos los proyectos crean archivos DLL, por lo que tener datos en espacios de nombres anónimos no sería una buena idea, ¿no? Pero las funciones estarían bien?
Saludos.
Nuestra estructura oficial siempre se necesita una reconstrucción por lo que creen que este enfoque podría mejorar el rendimiento de construcción mucho. Pero dado que los builds oficiales son principalmente consumidos por Devs, pero los pdbs generados por UnityBuild pueden ser inválidos para el código no-unitybuild. (No queremos desarrollar con una configuración de compilación unitaria, ¿verdad?) –
Razón completamente diferente para incluir algunos archivos de implementación en otro archivo de implementación es: estos archivos pueden autogenerarse. Es mucho más fácil generar automáticamente un archivo completo que tratar cambios de inyección en el código existente. –
Definitivamente patológico; Solo puedo adivinar el motivo por el que cualquiera podría querer hacer eso (si, por otro lado, puede preguntarles directamente, debería hacerlo). Normalmente en C++ quieres hacer lo contrario, no solo mantener los archivos de implementación sino también los encabezados bien separados. (Una trampa común de los proyectos de C++ es "#include spaghetti", con cada archivo de cabecera dependiendo de cada uno). ¿Quizás para poner a prueba el compilador? – Morendil