c++ - remix - smart contracts ethereum
¿Cómo manejas las grandes dependencias en Boost? (4)
Boost es una biblioteca muy grande con muchas interdependencias, que también lleva mucho tiempo compilar (lo que para mí ralentiza el tiempo de respuesta de CruiseControl ).
Las únicas partes de impulso que uso son boost :: regex y boost :: format.
¿Hay alguna manera fácil de extraer solo las partes de impulso necesarias para que una sub biblioteca particular aumente las compilaciones más rápido?
EDITAR: para responder la pregunta sobre por qué estamos reconstruyendo el impulso ...
- Analizar los archivos de cabecera de impulso todavía lleva mucho tiempo. Sospecho que si pudiéramos extraer solo lo que necesitamos, el análisis también ocurriría más rápido.
- Nuestra configuración CruiseControl construye todo desde cero. Esto también lo hace más fácil si actualizamos la versión de boost que estamos usando. Pero investigaré para ver si podemos cambiar nuestro proceso de compilación para ver si nuestra máquina de compilación puede generar impulso cuando se producen cambios y comprometer esos cambios a SVN. (Mi compañía tiene una política de que todo lo que sale por la puerta debe ser construido en la "máquina de construir").
¡Los encabezados precompilados son la palabra del día! Incluya los encabezados de impulso que necesita en su encabezado precompilado - ¡tada!
A menos que esté parcheando las bibliotecas de impulso, no hay ninguna razón para volver a compilar cada vez que realice una compilación.
Primero, puede usar la herramienta bcp (puede encontrarla en la subcarpeta de herramientas) para extraer los encabezados y archivos que está usando. Sin embargo, esto no ayudará con los tiempos de compilación. Segundo, no tienes que reconstruir Boost todo el tiempo. Simplemente precompila los archivos lib una vez y en cada cambio de versión, y copia la carpeta "stage" en el momento de compilar.
Estamos usando Boost, pero solo incluimos archivos de objetos para los tipos que realmente usamos. Es decir, construimos nuestra propia biblioteca estática con un grupo de utilidades propias e incluimos aquellas partes de Boost que consideramos útiles. Nuestro CMakeLists.txt
ve más o menos así (usted debería poder cargar esto en CMake, si ajusta las FUENTES como corresponde).
project( MyBoost )
set(SOURCES
boost/regex/src/c_regex_traits.cpp
boost/regex/src/cpp_regex_traits.cpp
boost/regex/src/cregex.cpp
boost/regex/src/fileiter.cpp
boost/regex/src/icu.cpp
boost/regex/src/instances.cpp
boost/regex/src/posix_api.cpp
boost/regex/src/regex.cpp
boost/regex/src/regex_debug.cpp
boost/regex/src/regex_raw_buffer.cpp
boost/regex/src/regex_traits_defaults.cpp
boost/regex/src/static_mutex.cpp
boost/regex/src/usinstances.cpp
boost/regex/src/w32_regex_traits.cpp
boost/regex/src/wc_regex_traits.cpp
boost/regex/src/wide_posix_api.cpp
boost/regex/src/winstances.cpp
)
add_library( MyBoost STATIC ${SOURCES})