fmt
Integrar fmt con CMake: biblioteca compilada, cabeceras y módulos
Trata el despliegue de fmt como una decisión de dependencia y ABI. Fija el código y no confundas una prueba con cabeceras con una matriz de producción.
Qué aprenderás
- Despliega una dependencia real
- Expresa la elección en el proyecto
- Verifica el artefacto que entregarás
Antes de empezar
- Valores, referencias, cadenas y destinos de construcción en C++
- Distinguir expectativas documentadas de resultados medidos
Traza comportamientos concretos de fmt y elige una integración con límites explícitos de salida, vida útil y verificación.
Conclusiones clave
- Elige un destino CMake explícito y una revisión fija.
- Una base C++11 no implica disponibilidad de todos los módulos y controles estáticos.
- Una prueba con cabeceras no demuestra un despliegue instalado, compartido o modular.
Despliega una dependencia real
La unidad entregable es tu aplicación y su integración elegida de fmt. La guía oficial ofrece fmt::fmt para la biblioteca compilada, fmt::fmt-header-only para cabeceras y un destino de módulos opcional. Recomienda biblioteca compilada o módulos por el tiempo de construcción; este artículo no atribuye a tu aplicación una aceleración que no se ha medido.
Para reproducibilidad, incorpora o descarga una revisión exacta y registra las herramientas y opciones que la consumen. El destino CMake ordinario inspeccionado declara una base C++11, mientras la prueba didáctica utiliza C++20 para ejercitar consteval. El nivel mínimo de lenguaje de una biblioteca no implica que todas sus funciones opcionales estén disponibles en él.
Expresa la elección en el proyecto
El fragmento CMake supone que el repositorio fijado está en third_party/fmt. Desactiva documentación, pruebas upstream, instalación y módulos para este consumidor pequeño. El ejecutable enlaza fmt::fmt en lugar de recopilar directorios de cabeceras y esperar que aparezca la biblioteca correcta al enlazar. Es una referencia de integración, no una afirmación de que aquí se ejecutó una construcción CMake completa.
El destino de cabeceras propaga FMT_HEADER_ONLY e incorpora implementación desde las cabeceras. Evita un artefacto separado de fmt, pero puede repetir trabajo de compilación. La ruta nativa de módulos depende del generador y del compilador: la condición GNU inspeccionada exige GCC 15, aunque un comentario anterior menciona GCC 14. Comprueba la condición ejecutada.
Verifica el artefacto que entregarás
BUILD_SHARED_LIBS cambia la forma de la biblioteca; incorporar una biblioteca estática en otro objeto compartido puede requerir código independiente de posición en las plataformas pertinentes. Mantén coherentes ABI del compilador, enlace del runtime, modo de construcción y revisión. Poder incluir una cabecera no detecta todas las incompatibilidades del enlazador o de una biblioteca desplegada.
La prueba editorial acotada utiliza seis cabeceras cuyos bytes se contrastaron con el árbol Git fijado. No sustituye pruebas del generador CMake, paquete instalado, cargador compartido, módulos C++ o plataforma objetivo. Antes de publicar, ejecuta las pruebas de tu aplicación con la integración que entregarás y registra la identidad del artefacto resultante.
Pasos de implementación
- 1
Coloca la revisión verificada en third_party/fmt.
- 2
Selecciona deliberadamente biblioteca, cabeceras o módulo.
- 3
Construye y prueba el consumidor con compilador y enlace previstos.
- 4
Comprueba el artefacto desplegado, no solo la presencia de cabeceras.
Ejemplo para copiar
cmake_minimum_required(VERSION 3.28)
project(fmt_demo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(FMT_DOC OFF CACHE BOOL "" FORCE)
set(FMT_TEST OFF CACHE BOOL "" FORCE)
set(FMT_INSTALL OFF CACHE BOOL "" FORCE)
set(FMT_MODULE OFF CACHE BOOL "" FORCE)
add_subdirectory(third_party/fmt EXCLUDE_FROM_ALL)
add_executable(fmt_demo main.cc)
target_link_libraries(fmt_demo PRIVATE fmt::fmt)Preguntas frecuentes
¿El modo solo cabeceras siempre construye más rápido?
No. Es cómodo, pero la compilación repetida tiene otro coste. La guía recomienda biblioteca compilada o módulos para mejorar la construcción; mide tu proyecto.
¿La revisión verificó módulos CMake y una ABI de producción?
No. Requieren una matriz aparte de compiladores, generadores y despliegues; la prueba acotada con cabeceras no los demuestra.
Fuentes
- CMakeLists.txtFuente verificada 2026-09-08
- doc/get-started.mdFuente verificada 2026-09-08
- include/fmt/core.hFuente verificada 2026-09-08
- include/fmt/format.hFuente verificada 2026-09-08