English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Prólogo
La biblioteca Boost abarca un amplio rango, incluyendo subbibliotecas relacionadas con la manipulación de cadenas y texto como la biblioteca format y la biblioteca regexp, subbibliotecas relacionadas con contenedores como la biblioteca variant (que compite con QVariant de Qt), subbibliotecas de iteradores como la biblioteca tokenizer (que puede tokenizar caracteres), además de subbibliotecas relacionadas con algoritmos, objetos de función y programación de alto nivel como la biblioteca functional, la biblioteca lambda y la biblioteca signal, también subbibliotecas relacionadas con programación genérica y programación con plantillas como call traits y mpl, y subbibliotecas relacionadas con programación concurrente como la biblioteca thread, etc., etc.
Boost es tan poderoso, sin duda también es grande. La instalación de boost en Windows requiere mucho espacio.} 2G+ El espacio, y la configuración de compilación también es muy complicada.
Este artículo discute cómo usar la biblioteca boost sin configurarla.
La solución se puede decir con una frase:
Recortar la biblioteca boost y embeber el código fuente de boost en el proyecto para que el proyecto pueda desvincularse de la biblioteca boost.
Se explica el significado del recorte de la biblioteca boost mediante un ejemplo.
Quizás aún no entiendes qué significa recortar la biblioteca boost, así que vamos a ejecutar un ejemplo. Usando mi cmake-Un ejemplo dentro de las plantillas de código boost, el código fuente tiene solo un main.cpp, que contiene las siguientes líneas:
#include <cstdio> #include <boost/date_time/posix_time/posix_time_types.hpp> int main( void ) { namespace pt = boost::posix_time; pt::ptime now = pt::second_clock::local_time(); printf( "%s\t->\t%04d-%02d-%02d %02d:%02d:%02d\n" , "date '+%Y-%m-%d %H:%M:%S' , (int)now.date().year() , (int)now.date().month() , (int)now.date().day() , (int)now.time_of_day().hours() , (int)now.time_of_day().minutes() , (int)now.time_of_day().seconds() ); return 0; }
La salida de ejecución del programa es aproximadamente:
date '+%Y-%m-%d %H:%M:%S' -> 2016-07-11 19:33:19
esto 2Cero línea de código que muestra el efecto de una instrucción común en el sistema operativo Linux, date, que muestra la hora actual (equivalente a ingresar date en la línea de comandos):+%Y-%m-%d %H:%M:%S')。
Si tu sistema tiene configurado Boost, ve al enlace superior para descargar el código fuente, entra en la carpeta Boost, aquí hay tres archivos: uno main.cpp, uno CMakeLists.txt y uno README documento de instrucciones.
Pero no es fácil ejecutar este programa, especialmente en sistemas operativos Windows donde todo se hace manualmente: debes descargar tú mismo la versión adecuada de Boost y configurar algunas variables de entorno.
En Linux es más simple, solo tres pasos (primero descarga el código fuente y cd al directorio del código fuente):
sudo apt-get install -y libboost-all-dev cmake mkdir build && cd build cmake .. && make && ./BOOST
No puedes evitar sentir, para ejecutar un 2Un programa de 0 líneas, ¡sin embargo, requiere instalar manualmente una librería Boost de 2 a 3 G!
En este momento, el recorte de la biblioteca Boost se vuelve particularmente importante. No queremos que las personas que obtienen el código tengan que gastar tiempo configurando la biblioteca Boost, tampoco queremos que nuestro código tenga que ser muy cuidadoso para ejecutarse. Queremos que nuestro código pueda ejecutarse rápidamente bajo cualquier condición!
Después de recortar la biblioteca Boost, los archivos de cabecera tienen aproximadamente 3.18 MB, los archivos cpp tienen dos aproximadamente 11 KB. Parece bastante grande, pero después de comprimirse 213 KB! Después de obtener este código, primero descomprime include.zip en la carpeta actual, luego ejecuta cmake para generar el proyecto VS (o el proyecto makefile en Linux), luego compila y ejecuta. ¡No necesitas preocuparte por la configuración de la biblioteca Boost!
Creo que seguro que puedes ejecutar este programa. Independientemente del sistema operativo que uses, o del compilador que uses.
Funciona más cómodamente, esto es el significado de recortar la biblioteca Boost.
¿Cómo puedo recortar la parte que necesito?
Vamos a investigar cómo obtener lo siguiente 3.18 MB de archivos de cabecera,11 KB de archivos cpp.
Primero, descarga el código fuente de la biblioteca Boost, puedes ir a Sitio web oficialSolo necesitamos las carpetas boost y libs del código fuente oficial release, por lo que te recomiendo que descargues mi copia de seguridad. Porque realmente es mucho más pequeña y se descarga más rápido. Además, contiene el herramienta bcp para extraer el código fuente de boost.1。
Luego, descomprime el paquete descargado, entra en la carpeta del código fuente, crea una nueva carpeta, por ejemplo, llamada output, luego abre la ventana de comandos en la ventana actual e introduce ./bcp.exe boost/date_time/posix_time/posix_time_types.hpp output, aquí "./"bcp.exe" es nuestra herramienta de recorte, "boost/date_time/posix_time/"posix_time_types.hpp" es el archivo de cabecera de boost utilizado en nuestro proyecto, si hay varios archivos de cabecera, sepa separarlos con espacios y escribirlos todos en la línea de comandos.2El "output" final es la carpeta de salida.
En cmake, este proceso es más o menos
1) Crea una carpeta include en el directorio raíz del código fuente y añade include_directories( ${CMAKE_SOURCE_DIR} ) al archivo CMakeLists.txt en la carpeta raíz;
2) Crea una carpeta libs, coloca los archivos cpp recortados en esta carpeta MiniBoost, y luego consulta district10/bcp-example-1/libs Después de escribir el archivo CMakeLists, añade add_subdirectory( libs) al archivo CMakeLists en la carpeta raíz.3) Enlazar el miniboost recortado a nuestro binario: target_link_libraries( ${PROJECT_NAME} MiniBoost ).
Puedes compararlos detalladamente y ver las diferencias y relaciones entre la biblioteca Boost instalada en el sistema y la biblioteca Boost recortada que se incluye (a la que llamo MiniBoost).
Nota:Un punto a tener en cuenta es que en los archivos de cabecera extraídos, boost/config/Es mejor eliminar el contenido de auto_link.hpp, de lo contrario, en la plataforma Windows, boost intentará enlazar automáticamente. Por lo tanto, generalmente vacío este archivo.
Resumen
Este es el contenido completo de este artículo, espero que el contenido de este artículo pueda ayudarles en su aprendizaje o trabajo. Si tienen alguna pregunta, pueden dejar un mensaje para discutir.