Integrando VSCode, Mingw-w64 y CMake (Parte I)

Última actualización: 3 de septiembre de 2023

Artículos de la serie:

Introducción


Esta serie de posts se centrará en la instalación y configuración de un entorno de trabajo para proyectos en C++ bajo MS Windows (7 o posterior, 64-bit) basado en:
  • Visual Studio Code (https://code.visualstudio.com/), un editor gratuito y de código abierto –si bien la descarga oficial se realiza bajo una licencia de software propietario– desarrollado desde 2015 por Microsoft para los sistemas Linux, MS Windows y macOS. Proporciona, entre otras funcionalidades, un alto grado de configuración por parte del usuario, resaltado de sintaxis, soporte para debugging, autocompleción e información de código (IntelliSense) y control integrado de Git. Fue declarado el IDE más popular entre desarrolladores en el Stack Overflow Developer Survey de 2022.
  • Mingw-w64 (https://mingw-w64.org/), un entorno de desarrollo de software para MS Windows que incluye un puerto de los compiladores GCC (https://gcc.gnu.org/). Contiene un subconjunto de la API de Windows, lo que permite el desarrollo de aplicaciones nativas tanto de 32 como de 64 bits. Realizaremos su instalación a través de la plataforma MSYS2.
  • CMake (https://cmake.org/), una herramienta de construcción, prueba, distribución e instalación de proyectos ampliamente extendida en el ámbito de la programación profesional en C y C++. Nos permitirá controlar el proceso de construcción de nuestros proyectos (build process) mediante ficheros CMakeLists.txt independientes de nuestro build system nativo (como GNU Make o Ninja).


Entorno MSYS2


La versión 13.2 de los compiladores GCC fue publicada el 27 de julio de 2023, proporcionando un amplio soporte para el estándar ISO C++20 y, de forma experimental, para C++23. Existen varias distribuciones que permiten una sencilla instalación de estos compiladores en MS Windows. Una de ellas viene dada por MSYS2, una plataforma de desarrollo y distribución de software que incluye un puerto para Windows del sistema de gestión (package managerpacman de Arch Linux (más información en https://wiki.archlinux.org/index.php/pacman). MSYS2 permite la construcción de aplicaciones nativas para Windows a través de Mingw-w64. De optar por esta solución, descargaremos en primer lugar su instalador 'x86_64' (64-bit) a través del portal:

https://www.msys2.org/
Nota: La Wiki asociada a MSYS2 está disponible en https://www.msys2.org/wiki/Home/, mientras que el repositorio de packages puede consultarse en https://packages.msys2.org/package/.
Seguiremos los pasos de instalación 1 a 4 indicados en el portal, a saber:
  1. Descargar el instalador disponible en https://www.msys2.org/.
  2. Ejecutar el instalador bajo un sistema MS Windows 8.1 o superior de 64 bits.
  3. Escoger una dirección (folder) apropiada para la instalación (típicamente, C:\msys64).
  4. Una vez completada la instalación, y antes de cerrar el instalador, seleccionar la casilla 'Ejecute MSYS2 ahora' para iniciar MSYS2 por vez primera y proceder a actualizar el sistema.
Se abrirá entonces una terminal (en el entorno por defecto UCRT64) desde donde introduciremos el comando pacman -Syu para iniciar la sincronización de las bases de datos de los paquetes (véase la figura inferior):

Es posible que se nos indique, en algún punto intermedio del proceso, la necesidad de finalizar la ejecución de MSYS2 y cerrar su terminal. Procederemos de esa forma, volviendo a abrir la aplicación MSYS2 UCRT64 desde el botón de inicio de Windows. Ejecutaremos entonces el comando pacman -Su para finalizar la actualización.

Por último, adquiriremos las herramientas básicas de gestión y compilación de proyectos en C++ (git, Mingw-w64 y CMake) ejecutando los comandos siguientes:
  • pacman -S git
  • pacman -S mingw-w64-ucrt-x86_64-toolchain (se nos solicitará la introducción de una selección de herramientas. Pulsaremos ENTER si deseamos instalar la totalidad del repositorio)
  • pacman -S mingw-w64-ucrt-x86_64-cmake
Una vez instaladas dichas herramientas básicas, incluiremos la dirección C:\msys64\ucrt64\bin o similar (aquélla donde se encuentre localizado, en particular, el ejecutable g++.exe) en la variable PATH del sistema, con el fin de poder emplear las herramientas anteriores fuera del entorno MSYS2. Para ello, acudiremos a 'Panel de control\Sistema y seguridad\Sistema' de Windows. En el menú lateral de opciones, seleccionaremos 'Configuración avanzada del sistema'. Una vez en la ventana de propiedades del sistema, pulsaremos sobre 'Variables de entorno'. Editaremos entonces la sección 'Path' de las variables del sistema para añadir la dirección indicada anteriormente, separando la nueva entrada de las ya existentes con punto y coma si fuese necesario.

Con el fin de comprobar que la instalación y la inclusión en el PATH son correctas, bastará abrir el símbolo del sistema (cmd) e introducir el comando gcc --version. Recibiremos entonces un mensaje indicando la versión instalada del compilador:

gcc (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Visualizaremos un mensaje similar de ejecutar el comando cmake --version.


Editor VSCode


Para la instalación del editor VSCode, procederemos en la forma siguiente:

[1] Descargaremos e instalaremos el software desde este enlace: https://code.visualstudio.com/

[2] Una vez instalado, ejecutaremos el editor. Pulsaremos la combinación de teclas Ctrl+Shift+X para desplegar el menú lateral de extensiones del editor. Realizaremos la búsqueda 'C++' y seleccionaremos la herramienta (normalmente la primera en la lista) 'C/C++ [ms-vscode.cpptools] IntelliSense, debugging, and code browsing' desarrollada por Microsoft (ver imagen inferior). Pincharemos sobre 'Install' y después sobre 'Reload' para hacer efectivos los cambios.


[3] De forma similar, instalaremos las extensiones 'CMake [twxs.cmake]' y 'CMake Tools [ms-vscode.cmake-tools]':



De forma alternativa a los pasos [2] y [3], el lector quizás desee instalar la solución 'C/C++ Extension Pack [ms-vscode.cpptools-extension-pack]', que contiene las extensiones indicadas anteriormente, así como varias adicionales que facilitan la generación de documentación en Doxygen y proporcionan temas de trabajo para el editor, entre otras funcionalidades.

[4] Finalmente, abriremos el Command Palette del editor con la combinación de teclas Ctrl+Shift+P y ejecutaremos el comando >Preferences: Open Settings (JSON) (en Castellano: >Preferencias: Abrir configuración de usuario (JSON)). Añadiremos entonces, separadas por comas, las siguientes líneas al fichero settings.json (véase la imagen inferior):

"cmake.configureOnOpen": true,
"cmake.generator": "MinGW Makefiles"

La segunda línea, en particular, establecerá de forma incondicional a mingw32-make como build tool a utilizar.

Indicar en este punto que, de forma alternativa y dependiendo de las necesidades del programador, podría instalarse el build system Ninja (https://ninja-build.org/) acudiendo a la plataforma MSYS2 y ejecutando el comando:

pacman -S mingw-w64-ucrt-x86_64-ninja

En este caso, al configurar el generador de CMake en el fichero settings.json de VSCode, escribiríamos:

"cmake.generator": "Ninja"


Puedes acceder al siguiente artículo de la serie a través de este enlace.

2 comentarios:

  1. Hola Daniel! Quiero hacer un proyecto C++ precisamente con lo que has publicado aquí.

    ¿Cómo vinculo (enlazar) varios archivos C (.cpp, .h)? En la programación orientada a objetos con C, en una clase se separa la interfaz de la implementación (archivo de encabezado de interfaz .h, archivo de implementación .cpp). Y hay un tercer archivo .cpp que contiene la función Main. ¿Cómo se compilan y vinculan (enlazan) esos tres archivos en Visual Studio Code?

    ResponderEliminar
  2. @Manuel Villagra: El quinto artículo de esta serie proporciona detalles acerca de cómo construir un proyecto que involucre la codificación de varias bibliotecas internas y un ejecutable. Confío en que su contenido resulte de utilidad.

    ResponderEliminar