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

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

WSL 2 es la nueva versión recomendada de la 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 nativo WSL 1 introducido en Visual Studio 2019 versión 16.1.

El conjunto de herramientas WSL 2 de Visual Studio admite proyectos de Linux basados en CMake y MSBuild. CMake es nuestra recomendación para todo el desarrollo multiplataforma de C++ con Visual Studio. Se recomienda 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, vea Video: 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 supone que todos los archivos de origen se originan en el sistema de archivos de Windows. Al establecer como destino una distribución de WSL 2, Visual Studio ejecuta un comando local rsync para copiar archivos desde el sistema de archivos de Windows al sistema de archivos WSL. La copia local de rsync no requiere intervención del usuario. Se produce automáticamente cuando Visual Studio detecta que usa 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 presets de CMake en Visual Studio admite el conjunto de herramientas de WSL 2. Para obtener más información, consulte Integración de presets de CMake en Visual Studio y Visual Studio Code y Configurar y compilar con presets 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. Instale 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. En el instalador de Visual Studio, compruebe que Herramientas de CMake en C++ para Linux están instaladas. Para ello, elija Modify para la versión de Visual Studio. En la pestaña Componentes individuales , busque herramientas de C++ CMake para Linux y Mac y asegúrese de que está seleccionada e instalada. Este componente es necesario para Visual Studio detectar las instalaciones de WSL.

  3. 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 cmake g++ gdb make ninja-build rsync zip
    

    Que instala:

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

Desarrollo multiplataforma de CMake con una distro 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 /> CMake Project:

  1. En la pantalla Visual Studio Get started, seleccione Crear un nuevo proyecto.

    Screenshot de la Visual Studio 2022 get started dialog box. Las opciones disponibles son: Clonar un repositorio, Abrir un proyecto o una solución, Abrir una carpeta local, Crear un proyecto o Continuar sin código.":::

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

  3. Habilite la integración de los presets 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. Como alternativa, podría agregar un CMakePresets.json archivo 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 Empezar. 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 consulta 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 del menú desplegable del sistema de destino de Visual Studio. WSL2: Ubuntu-20.04 está seleccionado.

    Nota:

    Si Visual Studio comienza a configurar el proyecto automáticamente, lea el paso 11 para administrar la implementación binaria de CMake y, a continuación, 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. Usa el menú desplegable ubicado en el centro para seleccionar la Configuración Preestablecida activa. 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 preajuste 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 de los preajustes 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 Visual Studio cómo invocar la compilación. La ilustración del paso 7 muestra que el preajuste de compilación activo es el Default preajuste de compilación 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 manualmente el comando configurar con Project>Configureproject-name

    Captura de pantalla del menú desplegable 'configurar' del proyecto de Visual Studio. Configurar CMakeProject está seleccionado.

  9. Si no tiene instalada una versión compatible de CMake en la distribución de WSL 2, Visual Studio le pedirá debajo de la cinta de menús 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 un mensaje 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 objetivos de CMake disponibles para el proyecto.

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

  12. Expanda la subcarpeta del proyecto en la Explorador de soluciones. En el archivo CMakeProject.cpp, establezca un punto de interrupción en main(). También puede ir a la vista de destinos de CMake seleccionando el botón Selector de vistas en la Explorador de soluciones, que se muestra resaltado en la siguiente captura de pantalla.

    Screenshot del explorador de soluciones de Visual Studio que muestra el botón para cambiar de vistas. Se encuentra a la derecha del botón de 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 de Visual Studio Linux 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 ruptura en la línea que dice return 0;.

Ahora ha compilado 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 Enable CMake Presets integration in 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 el mapa de configuración remota de proveedores de Visual Studio.

Si forceWSL1Tooslet se establece en true, Visual Studio no mantiene una copia de los archivos de origen en el sistema de archivos 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 porque WSL 2 es más lento cuando los archivos del proyecto se almacenan en su lugar 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 Visual Studio mapa de proveedores de configuración remota.

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 IntelliSense o especificar otras opciones de IntelliSense en el mapa de configuración del proveedor 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

CMake se recomienda 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 actualizar 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 un menú desplegable de Visual Studio con el conjunto de herramientas de plataforma seleccionado y, a la derecha, otro menú desplegable con el conjunto de herramientas WSL2 seleccionado.

Si tiene como destino una distribución de WSL 2 y no quiere usar el conjunto de herramientas de WSL 2, a continuación, en la lista desplegable Platform Toolset, seleccione el GCC para Subsistema de Windows para Linux o Clang para Subsistema de Windows para Linux. Si se selecciona cualquiera de estos conjuntos de herramientas, Visual Studio no mantiene una copia de los archivos de origen en el sistema de archivos 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 porque WSL 2 es más lento cuando los archivos del 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

Video: Depurar C++ con distribuciones de WSL 2 y Visual Studio 2022
Download Visual Studio 2022
Crear un proyecto de CMake Linux en Visual Studio
Tutorial: depurar un proyecto de CMake en una máquina remota de Windows