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.
Instale WSL y una distribución de WSL 2 con las instrucciones que se indican en Instalación de WSL.
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:
En la pantalla Tareas iniciales de Visual Studio, seleccione Crear un proyecto.
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.":::
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.
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.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".
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.
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.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é.
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.
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.
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.
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 Sí para implementar archivos binarios de CMake en la distribución de WSL 2.
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".
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.
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.
Expanda la subcarpeta del proyecto en el Explorador de soluciones. En el archivo
CMakeProject.cpp
, establezca un punto de interrupción enmain()
. 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: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: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:
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