Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El desarrollo de Visual Studio C y C++ ya no es solo para Windows. En este tutorial se muestra cómo usar Visual Studio para el desarrollo multiplataforma de C++ en Windows y Linux. Se basa en CMake, por lo que no es necesario crear ni generar proyectos de Visual Studio. Al abrir una carpeta que contiene un archivo CMakeLists.txt, Visual Studio configura IntelliSense y compila automáticamente las opciones de compilación. Puede empezar a editar, compilar y depurar rápidamente el código localmente en Windows. A continuación, cambie la configuración para que haga lo mismo en Linux, todo desde Visual Studio.
En este tutorial, aprenderá a:
- clonar un proyecto de CMake de código abierto desde GitHub
- abrir el proyecto en Visual Studio
- Compilar y depurar un destino ejecutable en Windows
- agregar una conexión a una máquina Linux
- Compilar y depurar el mismo destino en Linux
Prerrequisitos
Configuración de Visual Studio para el desarrollo multiplataforma de C++
- En primer lugar, instale Visual Studio y elija desarrollo de escritorio con C++ y desarrollo de Linux con cargas de trabajo de C++. Esta instalación mínima es de solo 3 GB. En función de la velocidad de descarga, la instalación no debe tardar más de 10 minutos.
Configuración de una máquina Linux para el desarrollo multiplataforma de C++
Visual Studio no requiere ninguna distribución específica de Linux. El sistema operativo se puede ejecutar en una máquina física, en una máquina virtual o en la nube. También puede usar el Subsistema de Windows para Linux (WSL). Sin embargo, para este tutorial, se requiere un entorno gráfico. WSL no se recomienda aquí, ya que está pensado principalmente para operaciones de línea de comandos.
Visual Studio requiere estas herramientas en la máquina Linux: compiladores de C++,
gdb
,ssh
,rsync
,make
yzip
. En sistemas basados en Debian, puede usar este comando para instalar estas dependencias:sudo apt install -y openssh-server build-essential gdb rsync make zip
Visual Studio requiere una versión reciente de CMake en la máquina Linux con el modo de servidor habilitado (al menos 3.8). Microsoft genera una compilación universal de CMake que puede instalar en cualquier distribución de Linux. Se recomienda usar esta compilación para asegurarse de que tiene las características más recientes. Puede obtener los archivos binarios de CMake de la bifurcación de Microsoft del repositorio de CMake en GitHub. Vaya a esa página y descargue la versión que coincida con la arquitectura del sistema en la máquina Linux y, a continuación, marquela como ejecutable:
wget <path to binary> chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
Puede ver las opciones para ejecutar el script con
--help
. Se recomienda usar la opción-prefix
para especificar la instalación en la ruta de acceso /usr, ya que /usr/bin es la ubicación predeterminada donde Visual Studio busca CMake. En el ejemplo siguiente se muestra el script linux-x86_64. Cámbielo según sea necesario si usa una plataforma de destino diferente.sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
Git para Windows instalado en el equipo Windows.
Una cuenta de GitHub.
Clonación de un proyecto de CMake de código abierto desde GitHub
En este tutorial se usa el SDK Bullet Physics en GitHub. Proporciona simulaciones de física y detección de colisiones para muchas aplicaciones. El SDK incluye programas ejecutables de ejemplo que se compilan y ejecutan sin tener que escribir otro código. Este tutorial no modifica ninguno de los scripts de compilación o código fuente. Para empezar, clone el repositorio bullet3 desde GitHub en la máquina donde tiene instalado Visual Studio.
git clone https://github.com/bulletphysics/bullet3.git
En el menú principal de Visual Studio, elija Archivo > abrir > CMake. Vaya al archivo
CMakeLists.txt
en la raíz del repositorio bullet3 que descargó.Al abrir la carpeta, la estructura de carpetas será visible en el Explorador de soluciones.
Esta vista muestra exactamente lo que está en el disco, no una vista lógica o filtrada. De forma predeterminada, no muestra archivos ocultos.
Elija el botón Mostrar todos los archivos para ver todos los archivos de la carpeta.
Cambio a la vista de destinos
Al abrir una carpeta que usa CMake, Visual Studio genera automáticamente la caché de CMake. Esta operación puede tardar unos instantes, en función del tamaño del proyecto.
En la ventana salida, seleccione Mostrar salida de y, a continuación, elija CMake para supervisar el estado del proceso de generación de caché. Una vez completada la operación, indica "Se ha realizado la extracción de información de destino".
Una vez completada esta operación, IntelliSense se configura. Ya puede compilar el proyecto y depurar la aplicación. Visual Studio muestra ahora una vista lógica de la solución, en función de los destinos especificados en los archivos CMakeLists.
Utilice el botón Soluciones y carpetas del Explorador de Soluciones para cambiar a la Vista de Objetivos de CMake.
Así es como se ve esa vista en el Bullet SDK.
En la vista de destinos se proporciona una vista más intuitiva del contenido de esta base de código fuente. Puede ver que algunos destinos son bibliotecas y otros son ejecutables.
Expanda un nodo en la vista Destinos de CMake para ver sus archivos de código fuente, dondequiera que esos archivos se encuentren en el disco.
Agregar una configuración explícita de Windows x64-Debug
Visual Studio crea una configuración de depuración x64 predeterminada para Windows. Las configuraciones son la forma en que Visual Studio entiende qué destino de plataforma va a usar para CMake. La configuración predeterminada no se representa en el disco. Al agregar explícitamente una configuración, Visual Studio crea un archivo denominado CMakeSettings.json. Se rellena con los ajustes de todas las configuraciones que especifique.
Agregue una nueva configuración. Abra la lista desplegable Configuración de la barra de herramientas y seleccione Administrar configuraciones.
Se abre el Editor de configuración de CMake . Seleccione el signo más verde en el lado izquierdo del editor para agregar una nueva configuración. Aparece el cuadro de diálogo Agregar configuración a CMakeSettings :
En este cuadro de diálogo se muestran todas las configuraciones incluidas con Visual Studio, además de las configuraciones personalizadas que cree. Si quiere continuar usando una configuración x64-Debug, esa debería ser la primera que agregue. Seleccione x64-Debug y, a continuación, elija el botón Seleccionar . Visual Studio crea el archivo CMakeSettings.json con una configuración para x64-Debug y lo guarda en el disco. Puede usar los nombres que quiera para las configuraciones cambiando el parámetro name directamente en CMakeSettings.json.
Establecimiento de un punto de interrupción, compilación y ejecución en Windows
En este paso, depuramos un programa de ejemplo que muestra la biblioteca Bullet Physics.
En el Explorador de soluciones, seleccione AppBasicExampleGui y expándalo.
Abra el archivo
BasicExample.cpp
.Establezca un punto de interrupción que se alcance al hacer clic en la aplicación en ejecución. El evento click se controla en un método dentro de una clase auxiliar. Para llegar rápidamente:
Seleccione
CommonRigidBodyBase
, de donde se deriva el structBasicExample
. Está alrededor de la línea 30.Haga clic con el botón derecho y elija Ir a Definición. Ahora está en el encabezado CommonRigidBodyBase.h.
En la vista de explorador encima del origen, debería ver que se encuentra en
CommonRigidBodyBase
. A la derecha, puede seleccionar miembros para examinarlos. Abra la lista desplegable y seleccionemouseButtonCallback
para ir a la definición de esa función en el encabezado.
Coloque un punto de interrupción en la primera línea dentro de esta función. Se alcanzará al hacer clic en un botón del mouse en la ventana de la aplicación cuando se ejecute en el depurador de Visual Studio.
Para iniciar la aplicación, seleccione la lista desplegable Launch (Iniciar) en la barra de herramientas. Es el que tiene el icono de reproducción verde que dice "Seleccionar elemento de inicio". En la lista desplegable, seleccione AppBasicExampleGui.exe. El nombre del archivo ejecutable ahora se muestra en el botón iniciar:
Elija el botón iniciar para compilar la aplicación y las dependencias necesarias y, a continuación, iníciela con el depurador de Visual Studio asociado. Después de unos instantes, aparece la aplicación en ejecución:
Mueva el mouse a la ventana de la aplicación y haga clic en un botón para desencadenar el punto de interrupción. El punto de interrupción devuelve Visual Studio al primer plano y el editor muestra la línea donde se pausa la ejecución. Puede inspeccionar las variables de aplicación, los objetos, los subprocesos y la memoria, o recorrer el código de forma interactiva. Elija Continuar para permitir que la aplicación se reanude y, a continuación, salir con normalidad. O bien, detenga la ejecución en Visual Studio mediante el botón Detener.
Adición de una configuración de Linux y conexión a la máquina remota
Agregue una configuración de Linux. Haga clic con el botón derecho en el archivo CMakeSettings.json en la vista Explorador de soluciones y seleccione Agregar configuración. Verá el mismo cuadro de diálogo Agregar configuración a CMakeSettings que antes. Seleccione Linux-Debug esta vez y guarde el archivo CMakeSettings.json (ctrl + s).
Visual Studio 2019, versión 16.6 o posterior Desplácese hacia abajo hasta la parte inferior del Editor de configuración de CMake y seleccione Mostrar configuración avanzada. Seleccione Archivos Make de Unix como generador de CMake y, a continuación, guarde el archivo CMakeSettings.json (ctrl + s).
Seleccione Linux-Debug en la lista desplegable de configuración.
Si es la primera vez que se conecta a un sistema Linux, aparece el cuadro de diálogo Conectar al sistema remoto .
El cuadro de diálogo tiene campos para el nombre de host, el puerto, el nombre de usuario, el tipo de autenticación y la contraseña. Todos los campos están en blanco, excepto que El puerto está establecido en 22 y el tipo de autenticación está establecido en Contraseña.
Si ya ha agregado una conexión remota, puede abrir esta ventana; para ello, vaya a Herramientas > Opciones > administrador de conexiones multiplataforma>.
Proporcione la información de conexión a la máquina Linux y elija Conectar. Visual Studio agrega esa máquina a CMakeSettings.json como conexión predeterminada para Linux-Debug. También extrae los encabezados de la máquina remota, por lo que obtiene IntelliSense específico de esa conexión remota. A continuación, Visual Studio envía los archivos a la máquina remota y genera la caché de CMake en el sistema remoto. Estos pasos pueden tardar algún tiempo, en función de la velocidad de la red y la potencia de la máquina remota. Sabe que está completo cuando aparece el mensaje "Extracción de información de destino finalizada" en la ventana de salida de CMake.
Establecimiento de un punto de interrupción, compilación y ejecución en Linux
Como se trata de una aplicación de escritorio, debe proporcionar información de configuración adicional a la configuración de depuración.
En la vista Destinos de CMake, haga clic con el botón derecho en AppBasicExampleGui y elija Depurar e Iniciar configuración para abrir el archivo launch.vs.json que se encuentra en la subcarpeta oculta .vs . Este archivo es local para el entorno de desarrollo. Puede moverlo a la raíz del proyecto si quiere insertarlo en el repositorio y guardarlo con su equipo. En este archivo, se ha agregado una configuración para AppBasicExampleGui. Esta configuración predeterminada funciona en la mayoría de los casos, pero no aquí. Dado que es una aplicación de escritorio, debe proporcionar información adicional para iniciar el programa para que pueda verlo en la máquina Linux.
Para buscar el valor de la variable
DISPLAY
de entorno en la máquina Linux, ejecute este comando:echo $DISPLAY
En la configuración de AppBasicExampleGui, hay una matriz de parámetros, "pipeArgs". Contiene una línea: "${debuggerCommand}". Es el comando que inicia
gdb
en la máquina remota. Visual Studio debe exportar la presentación a este contexto antes de que se ejecute ese comando. Por ejemplo, si el valor de la pantalla es:1
, modifique esa línea de la siguiente manera:"export DISPLAY=:1;${debuggerCommand}",
Inicie y depure la aplicación. Abra la lista desplegable Seleccionar elemento de inicio en la barra de herramientas y elija AppBasicExampleGui. A continuación, elija el icono de reproducción verde en la barra de herramientas o presione F5. La aplicación y sus dependencias se basan en la máquina Linux remota y, a continuación, se inician con el depurador de Visual Studio conectado. En la máquina Linux remota, debería ver que aparece una ventana de aplicación.
Mueva el mouse a la ventana de la aplicación y haga clic en un botón. Se alcanza el punto de interrupción. La ejecución del programa se detiene, Visual Studio vuelve al primer plano y ve el punto de interrupción. También debería ver que aparece una ventana de consola de Linux en Visual Studio. La ventana proporciona la salida de la máquina Linux remota y también puede aceptar entradas para
stdin
. Al igual que cualquier ventana de Visual Studio, puede acoplarla donde prefiera verla. Su posición se conservará en futuras sesiones.La salida de la ventana indica que las funciones C11 cargadas dinámicamente mediante dlopen/dlsym son correctas. Se ha creado un contexto GL 3.0, y el contexto de renderizado Direct GLX ha sido obtenido y activado. La ventana tiene información de versión para GL_VENDOR, GL_VERSION, GL_SHADING_LANGUAGE_VERSION, etc.
Puede inspeccionar las variables de aplicación, los objetos, los subprocesos, la memoria y recorrer el código de forma interactiva mediante Visual Studio. Pero esta vez, lo hace todo en una máquina Linux remota en lugar de en el entorno local de Windows. Puede elegir Continuar para permitir que la aplicación se reanude y salga normalmente, o bien puede elegir el botón detener, como con la ejecución local.
Examine la ventana Pila de llamadas y vea las llamadas a
x11OpenGLWindow
desde que Visual Studio inició la aplicación en Linux.La pila de llamadas muestra el punto de ruptura en CommonRigidBodyBase::mouseMoveCallback y las llamadas que preceden a este, como OnMouseMove, X11OpenGLWindow::pumpMessage, etc.
Qué has aprendido
En este tutorial, ha clonado una base de código directamente desde GitHub. Compilaste, ejecutaste y depuraste en Windows sin modificaciones. A continuación, ha usado la misma base de código, con cambios de configuración menores, para compilar, ejecutar y depurar en una máquina Linux remota.
Pasos siguientes
Obtenga más información sobre cómo configurar y depurar proyectos de CMake en Visual Studio:
Proyectos de CMake en Visual Studio
Configuración de un proyecto de CMake en Linux
Conexión al equipo remoto de Linux
Personalización de la configuración de compilación de CMake
Configuración de sesiones de depuración de CMake
Implementación, ejecución y depuración del proyecto de Linux
Referencia de configuración predefinida de CMakevcpkg en proyectos de CMakeInstalación y uso de paquetes con CMake en Visual Studio