CMake Fácil: Plantilla Reutilizable para tu Primer Proyecto en C++

Guía práctica de CMake: plantilla reutilizable para tu primer proyecto C++ con CMakeLists.txt, gestión de dependencias, builds fuera del árbol y pruebas.

20 ago 2025 • 5 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

Este artículo fue publicado originalmente en Valerius Petrini Programming Blog el 08/05/2025 y aquí se presenta una versión reescrita y en español titulada CMake Made Simple: A Reusable Template for Your First C++ Project

Empezar un proyecto C++ escribiendo g++ main.cpp -o main está bien para programas pequeños pero cuando el código crece con múltiples ficheros, librerías y dependencias, compilar desde la línea de comandos se vuelve tedioso y propenso a errores. CMake es un generador de sistemas de compilación multiplataforma que automatiza y organiza la construcción de proyectos C++. Con un fichero CMakeLists.txt puedes generar scripts de compilación para Ninja o Make y olvidarte de invocar largos comandos a mano.

Por qué usar CMake ventajas principales: compilación incremental para recompilar solo archivos cambiados; gestión de dependencias mediante find_package o FetchContent; builds fuera del árbol de origen para mantener limpios los ficheros fuente; buen soporte en IDEs y editores como VSCode y Visual Studio con IntelliSense y depuración; soporte para varios lenguajes además de CXX como C, C# y CUDA. Estas propiedades aceleran el desarrollo de aplicaciones a medida y software a medida para clientes.

Requisitos previos instala cmake y Ninja. En Windows descarga los binarios de las webs oficiales y añade los ejecutables a la variable PATH. En Linux usa el gestor de paquetes de tu distribución, por ejemplo en Ubuntu sudo apt install cmake ninja-build. Tener estas herramientas te permite usar el flujo cmake -S . -B build -GNinja y luego cmake --build build.

Estructura de proyecto recomendada crea un directorio con la siguiente estructura mínima: un directorio src con main.cpp, un directorio test con test.cpp, un directorio include para los hpp, un fichero CMakeLists.txt en la raíz y opcionalmente un Makefile que envuelva comandos de Ninja como atajo. Al ejecutar cmake se creará el directorio build donde quedarán todos los ficheros de compilación y los ejecutables pueden colocarse en build/bin.

Encabezado básico de CMakeLists.txt empieza con cmake_minimum_required(VERSION 3.10) y project(NombreProyecto VERSION 0.1 LANGUAGES CXX). Define variables para los nombres de los ejecutables con set. Obliga la versión de C++ con set(CMAKE_CXX_STANDARD 17) y set(CMAKE_CXX_STANDARD_REQUIRED ON). Para que los ejecutables salgan en build/bin usa set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin). Usa file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*.cpp) y file(GLOB_RECURSE SOURCES_TEST CONFIGURE_DEPENDS src/*.cpp test/*.cpp) para agrupar automáticamente fuentes y detectar nuevos ficheros al reconfigurar.

Crear el ejecutable añade los ficheros con add_executable(${EXEC_NAME} ${SOURCES}) y añade la ruta de cabeceras con target_include_directories(${EXEC_NAME} PRIVATE include/). Configura flags útiles para desarrollo con target_compile_options(${EXEC_NAME} PRIVATE -Wall -Wextra -fdiagnostics-color=always -g) que activan advertencias, color en diagnósticos y símbolos de depuración.

Separar opciones por configuración de compilación no quieres las mismas opciones en Debug y Release. En Debug conviene -Wall -Wextra -fdiagnostics-color=always -g y en Release conviene -O3. En CMake puedes usar expresiones de configuración para aplicar opciones distintas según la variable CMAKE_BUILD_TYPE o la configuración de la plataforma; de este modo obtienes builds optimizados para producción y builds con símbolos para desarrollo y depuración.

Evitar repeticiones extrae opciones comunes a una biblioteca interfaz con add_library(common_flags INTERFACE) y target_compile_options(common_flags INTERFACE ...) y luego enlaza esa interfaz a cada ejecutable con target_link_libraries(${EXEC_NAME} PRIVATE common_flags). Esto mantiene el CMakeLists.txt limpio y evita duplicar bloques de configuración entre ejecutables y tests.

Importar librerías externas por ejemplo Boost usa find_package(Boost REQUIRED COMPONENTS filesystem) y luego target_link_libraries(${EXEC_NAME} PRIVATE common_flags Boost::filesystem). El mismo patrón sirve para muchas bibliotecas y facilita integrar dependencias en aplicaciones a medida y software a medida con módulos como Boost o con librerías modernas encontradas por CMake.

Flujo con Makefile opcional un Makefile puede envolver comandos cmake para simplificar setup, build y run. Un flujo recomendado es ejecutar make setup que lance cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Debug, luego make build que ejecute cmake --build build --config Debug -- -jN, y make run que compile y luego ejecute el binario en build/bin. Este atajo resulta útil para equipos y para scripts de integración continua.

Consejos prácticos evita incluir archivos binarios y temporales en el repositorio; mantén include para cabeceras y src para implementaciones; añade pruebas en test y usa CMake para recopilar tanto el ejecutable principal como los ejecutables de test. Aprovecha la integración con IDEs para depurar y navegar el código, y usa CMake Presets o toolchains para reproducir builds en entornos CI.

Sobre Q2BSTUDIO Q2BSTUDIO es una empresa de desarrollo de software que crea aplicaciones a medida y software a medida para clientes de distintos sectores. Somos especialistas en inteligencia artificial y ofrecemos soluciones de ia para empresas, agentes IA y servicios de inteligencia de negocio integrando herramientas como power bi. También brindamos servicios de ciberseguridad y servicios cloud aws y azure para desplegar, escalar y asegurar aplicaciones. Nuestra experiencia combina desarrollo a medida, arquitecturas cloud y modelos de IA para entregar productos robustos y escalables.

Servicios ofrecidos por Q2BSTUDIO incluyen desarrollo de aplicaciones a medida, consultoría en software a medida, implementación de soluciones de inteligencia artificial e ia para empresas, creación de agentes IA personalizados, proyectos de inteligencia de negocio con power bi, servicios de ciberseguridad y auditoría, y despliegue en servicios cloud aws y azure. Estas capacidades hacen que utilicemos flujos de trabajo profesional como CMake para proyectos C++ cuando la solución lo requiere.

Palabras clave para posicionamiento aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws y azure servicios inteligencia de negocio ia para empresas agentes IA power bi aparecen a lo largo del texto para mejorar la visibilidad y conectar este contenido con necesidades reales de empresas que buscan desarrollo a medida y soluciones basadas en IA y cloud.

Conclusión con recursos rápidos con una plantilla básica de CMakeLists.txt y un Makefile de envoltura puedes empezar un proyecto C++ escalable y organizado. Usar CMake facilita añadir tests, integrar bibliotecas externas y cambiar entre Debug y Release sin reescribir comandos. Si buscas ayuda profesional para poner en marcha un proyecto, optimizar una base de código o desarrollar una solución con inteligencia artificial y despliegue en aws o azure, en Q2BSTUDIO podemos ayudarte a diseñar e implementar la solución adecuada.

Contacto y siguiente paso ponte en contacto con el equipo de Q2BSTUDIO para evaluar tu proyecto de software a medida, soluciones de inteligencia artificial, ciberseguridad, agentes IA o integraciones con power bi y servicios cloud aws y azure y recibe una propuesta personalizada.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.

Live Chat