Tutorial: Compilación y depuración de C++ con WSL 2 y Visual Studio 2022

Visual Studio 2022 presenta un conjunto de herramientas de C++ nativo para el desarrollo del Subsistema de Windows para Linux versión 2 (WSL 2). Este conjunto de herramientas ya está disponible en Visual Studio 2022 17.0 o versiones posteriores.

WSL 2 es la nueva versión recomendada del Subsistema de Windows para Linux (WSL). Proporciona un mejor rendimiento del sistema de archivos de Linux, compatibilidad con la GUI y compatibilidad completa con llamadas del sistema. El conjunto de herramientas de WSL 2 de Visual Studio permite usar Visual Studio para compilar y depurar código de C++ en distribuciones de WSL 2 sin agregar una conexión SSH. Ya puede compilar y depurar código de C++ en distribuciones de WSL 1 mediante el conjunto de herramientas de WSL 1 nativo introducido en Visual Studio 2019 versión 16.1.

El conjunto de herramientas de WSL 2 de Visual Studio admite proyectos de Linux basados en MSBuild y CMake. CMake es nuestra recomendación para todo el desarrollo multiplataforma de C++ con Visual Studio. Aconsejamos el uso de CMake porque compila y depura el mismo proyecto en Windows, WSL y sistemas remotos.

Para ver una presentación en vídeo de la información de este tema, visite el vídeo Depuración de C++ con distribuciones de WSL 2 y Visual Studio 2022.

Información previa sobre el conjunto de herramientas de WSL 2

La compatibilidad multiplataforma de C++ en Visual Studio da por supuesto que todos los archivos de origen se originan en el sistema de archivos de Windows. Cuando se establece como destino una distribución de WSL 2, Visual Studio ejecuta un comando rsync local para copiar archivos del sistema de archivos de Windows al de WSL. La copia de rsync local no requiere la intervención del usuario. Se produce automáticamente cuando Visual Studio detecta que se está usando una distribución de WSL 2. Para obtener más información sobre las diferencias entre WSL 1 y WSL 2, consulte Comparación de WSL 1 con WSL 2.

La integración de valores preestablecidos de CMake en Visual Studio admite el conjunto de herramientas de WSL 2. Para obtener más información, consulte Integración de valores preestablecidos de CMake en Visual Studio y Visual Studio Code y Configuración y compilación con valores preestablecidos de CMake en Visual Studio. También hay información más avanzada en este artículo en la sección Consideraciones sobre proyectos avanzados de WSL 2 y CMake.

Instalación de las herramientas de compilación

Instale las herramientas necesarias para compilar y depurar en WSL 2. Instalará una versión reciente de CMake mediante la implementación binaria de CMake de Visual Studio en un paso posterior.

  1. Instale WSL y una distribución de WSL 2 con las instrucciones que se indican en Instalación de WSL.

  2. Suponiendo que su distribución use apt (en este tutorial se usa Ubuntu), use los siguientes comandos para instalar las herramientas de compilación necesarias en su distribución de WSL 2:

    sudo apt update
    sudo apt install g++ gdb make ninja-build rsync zip
    

    Los comandos apt anteriores instalan:

    • Un compilador de C++
    • gdb
    • CMake
    • rsync
    • zip
    • Un generador de sistema de compilación subyacente

Desarrollo de CMake multiplataforma con una distribución de WSL 2

En este tutorial se usan GCC y Ninja en Ubuntu, así como Visual Studio 2022 17.0, versión preliminar 2 o posteriores.

Visual Studio define un proyecto de CMake como una carpeta con un archivo CMakeLists.txt en la raíz del proyecto. En este tutorial, creará un proyecto de CMake mediante la plantilla Proyecto de CMake de Visual Studio:

  1. En la pantalla Tareas iniciales de Visual Studio, seleccione Crear un proyecto.

    Captura de pantalla del cuadro de diálogo Introducción a Visual Studio 2022. Las opciones disponibles son: Clonar un repositorio, Abrir un proyecto o una solución, Abrir una carpeta local, Crear un nuevo proyecto o Continuar sin código.":::

  2. En el cuadro de texto Buscar plantillas, escriba "cmake". Elija el tipo Proyecto de CMake y seleccione Siguiente. Asigne al proyecto un nombre y una ubicación y seleccione Crear.

  3. Habilite la integración de valores preestablecidos de CMake de Visual Studio. Seleccione Herramientas>Opciones>CMake>General. Elija Prefer using CMake Presets for configure, build, and test (Preferir el uso de valores preestablecidos de CMake para configurar, compilar y probar) y seleccione Aceptar. En su lugar, podría haber agregado un archivo CMakePresets.json a la raíz del proyecto. Para obtener más información, vea Habilitación de la integración de valores preestablecidos de CMake.

    Captura de pantalla de las opciones del proyecto de Visual Studio. Cmake > General está seleccionado.

    En el grupo de archivos de configuración de CMake, se llama y se seleccione "Usar valores preestablecidos de CMake si está disponible; de lo contrario, usar CMakeSettings.json".

  4. Para activar la integración, en el menú principal, seleccione Archivo>Cerrar carpeta. Aparece la página Tareas iniciales. En Abrir recientes, seleccione la carpeta que acaba de cerrar para volver a abrirla.

  5. Hay tres listas desplegables en la barra de menús principal de Visual Studio. Use la lista desplegable de la izquierda para seleccionar el sistema de destino activo. Este es el sistema en el que se invoca CMake para configurar y compilar el proyecto. Visual Studio realiza las consultas en las instalaciones de WSL con wsl -l -v. En la imagen siguiente, WSL2: Ubuntu-20.04 está seleccionado como sistema de destino.

    Captura de pantalla de la lista desplegable del sistema de destino de Visual Studio. WSL2: Ubuntu-20.04 es el seleccionado.

    Nota:

    Si Visual Studio empieza a configurar el proyecto automáticamente, lea el paso 11 para administrar la implementación binaria de CMake y, luego, continúe con el paso siguiente. Para personalizar este comportamiento, consulte Modificación de la configuración automática y las notificaciones de caché.

  6. Use la lista desplegable del centro para seleccionar el valor preestablecido de configuración activo. Los valores preestablecidos de configuración indican a Visual Studio cómo invocar CMake y generar el sistema de compilación subyacente. En el paso 7, el valor preestablecido de configuración activo es el valor linux-default creado por Visual Studio. Para crear un valor preestablecido de configuración personalizado, seleccione Administrar configuraciones… Para obtener más información sobre cómo configurar valores preestablecidos, consulte Selección de un valor preestablecido de configuración y Edición de valores preestablecidos.

    Captura de pantalla de la lista desplegable preestablecida de configuración activa de Visual Studio. Administrar configuraciones... está seleccionado.

  7. Use la lista desplegable de la derecha para seleccionar el valor preestablecido de compilación activo. Los valores preestablecidos de compilación indican a Visual Studio cómo invocar la compilación. En la ilustración del paso 7, el valor preestablecido de compilación activo es el valor Predeterminado creado por Visual Studio. Para obtener más información sobre los valores preestablecidos de compilación, vea Selección de un valor preestablecido de compilación.

  8. Configure el proyecto en WSL 2. Si la generación del proyecto no se inicia automáticamente, invoque la configuración de forma manual con Proyecto>Configurar nombre del proyecto.

    Captura de pantalla de la lista desplegable de configuración del proyecto de Visual Studio. La opción Configurar CMakeProject está seleccionado.

  9. Si no tiene una versión compatible de CMake instalada en su distribución de WSL 2, Visual Studio le pedirá debajo de la cinta de opciones del menú principal que implemente una versión reciente de CMake. Seleccione para implementar archivos binarios de CMake en la distribución de WSL 2.

    Captura de pantalla de una solicitud debajo de la barra de herramientas de Visual Studio

    Se solicita al usuario que instale los archivos binarios de C Make más recientes desde C Make. org porque la versión de C Make compatible no está instalada".

  10. Confirme que el paso de configuración se completó y que ve el mensaje de generación de CMake finalizada en la ventana Salida debajo del panel de CMake. Los archivos de compilación se escriben en un directorio del sistema de archivos de la distribución de WSL 2.

    Captura de pantalla de la ventana Salida de Visual Studio. Contiene mensajes generados durante el paso de configuración, incluida la finalización de la generación de C Make.

  11. Seleccione el destino de depuración activo. En el menú desplegable de depuración se enumeran todos los destinos de CMake disponibles para el proyecto.

    Captura de pantalla del menú desplegable Depuración de Visual Studio. CMakeProject está seleccionado.

  12. Expanda la subcarpeta del proyecto en el Explorador de soluciones. En el archivo CMakeProject.cpp, establezca un punto de interrupción en main(). También puede navegar a la vista de destinos de CMake si selecciona el botón selector de vista en el Explorador de soluciones, resaltado en la captura de pantalla siguiente:

    Captura de pantalla del explorador de soluciones de Visual Studio que muestra el botón para cambiar de vistas. Se encuentra a la derecha del botón Inicio.

  13. Seleccione Depurar>Iniciar, o bien presione F5. El proyecto se compila, el ejecutable se inicia en la distribución de WSL 2 y Visual Studio detiene la ejecución en el punto de interrupción. La salida del programa (en este caso, "Hello CMake.") está visible en la ventana de la consola de Linux:

    Captura de pantalla de un programa hola mundo en ejecución.

    La ventana de la consola Linux de Visual Studio muestra la salida del programa: "Hello C Make". La ventana del editor muestra el programa hola mundo. La ejecución se detuvo en un punto de interrupción en la línea que indica que devuelve 0;".

Ya ha creado y depurado una aplicación de C++ con WSL 2 y Visual Studio 2022.

Consideraciones sobre proyectos avanzados de WSL 2 y CMake

Visual Studio solo proporciona compatibilidad nativa con WSL 2 para proyectos de CMake que usan CMakePresets.json como archivo de configuración activo. Para migrar de CMakeSettings.json a CMakePresets.json, consulte Habilitación de la integración de valores preestablecidos de CMake en Visual Studio.

Si ha establecido como destino una distribución de WSL 2 y no quiere usar el conjunto de herramientas de WSL 2, en la asignación de proveedor de configuración remota de Visual Studio en CMakePresets.json, establezca forceWSL1Toolset en true. Para obtener más información, consulte la asignación de proveedor de configuración remota de Visual Studio.

Si forceWSL1Tooslet se establece en true, Visual Studio no conserva una copia de los archivos de origen en el sistema de archivos de WSL. En su lugar, accede a los archivos de origen en la unidad de Windows montada (/mnt/…).

En la mayoría de los casos, es mejor usar el conjunto de herramientas de WSL 2 con distribuciones de WSL 2, ya que WSL 2 es más lento cuando los archivos de proyecto se almacenan en el sistema de archivos de Windows. Para obtener más información sobre el rendimiento del sistema de archivos en WSL 2, consulte Comparación de WSL 1 con WSL 2.

Especifique la configuración avanzada (como la ruta de acceso al directorio de WSL 2 donde se copia el proyecto, las opciones de origen de copia y los argumentos del comando rsync) en la asignación de proveedor de configuración remota de Visual Studio en CMakePresets.json. Para obtener más información, consulte la asignación de proveedor de configuración remota de Visual Studio.

Los encabezados del sistema se siguen copiando automáticamente en el sistema de archivos de Windows para proporcionar la experiencia nativa de IntelliSense. Puede personalizar qué encabezados se incluyen en esta copia o se excluyen de ella en la asignación de proveedor de configuración remota de Visual Studio en CMakePresets.json.

Puede cambiar el modo de IntelliSense o especificar otras opciones de IntelliSense en la asignación de proveedor de configuración de Visual Studio en CMakePresets.json. Para obtener más información sobre la asignación de proveedor, consulte Asignación de proveedor de configuración remota de Visual Studio.

WSL 2 y proyectos de Linux basados en MSBuild

Se recomienda el uso de CMake para todo el desarrollo multiplataforma de C++ con Visual Studio, ya que permite compilar y depurar el mismo proyecto en Windows, WSL y sistemas remotos.

Pero es posible que tenga un proyecto de Linux basado en MSBuild.

Si tiene un proyecto de Linux basado en MSBuild, puede actualizarlo al conjunto de herramientas de WSL 2 en Visual Studio. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y elija Propiedades>General>Conjunto de herramientas de plataforma:

Captura de pantalla de una lista desplegable de Visual Studio con conjunto de herramientas de la plataforma seleccionado y, a la derecha, otra lista desplegable con WSL2 Toolset (Conjunto de herramientas de WSL 2) seleccionado.

Si ha establecido como destino una distribución de WSL 2 y no quiere usar el conjunto de herramientas de WSL 2, en el menú desplegable Conjunto de herramientas de la plataforma, seleccione el conjunto de herramientas GCC para el Subsistema de Windows para Linux o Clang para el Subsistema de Windows para Linux. Si se selecciona alguno de estos conjuntos de herramientas, Visual Studio no conserva una copia de los archivos de origen en el sistema de archivos de WSL y, en su lugar, accede a los archivos de origen a través de la unidad de Windows montada (/mnt/…). Los encabezados del sistema se siguen copiando automáticamente en el sistema de archivos de Windows para proporcionar una experiencia nativa de IntelliSense. Personalice los encabezados que se incluyen en esta copia o se excluyen de ella en Páginas de propiedades>General.

En la mayoría de los casos, es mejor usar el conjunto de herramientas de WSL 2 con distribuciones de WSL 2, ya que WSL 2 es más lento cuando los archivos de proyecto se almacenan en el sistema de archivos de Windows. Para obtener más información, consulte Comparación de WSL 1 con WSL 2.

Consulte también

Vídeo: Depuración de C++ con distribuciones de WSL 2 y Visual Studio 2022
Descarga de Visual Studio 2022
Creación de un proyecto de CMake para Linux en Visual Studio
Tutorial: Depuración de un proyecto de CMake en una máquina remota Windows