Compartir por


Configuración de un proyecto CMake de Linux en Visual Studio

La compatibilidad con Linux está disponible en Visual Studio 2017 y versiones posteriores. Para ver la documentación correspondiente a estas versiones, establezca la lista desplegable Versión que se encuentra sobre la tabla de contenido en Visual Studio 2017 o Visual Studio 2019.

En este tema se describe cómo agregar una configuración de Linux a un proyecto de CMake que tiene como destino un sistema Linux remoto o un Subsistema de Windows para Linux (WSL). Continúa la serie que empezó con Creación de un proyecto de CMake de Linux en Visual Studio. Si usa MSBuild, en su lugar consulte Configuración de un proyecto de MSBuild de Linux en Visual Studio.

Incorporación de una configuración de Linux

Una configuración se puede usar para tener como destino distintas plataformas (Windows, WSL, un sistema remoto) con el mismo código fuente. Una configuración también se usa para establecer los compiladores, pasar las variables de entorno y personalizar el modo de invocar a CMake. El archivo CMakeSettings.json especifica todas o algunas de las propiedades enumeradas en Personalización de la configuración de CMake, más otras propiedades que controlan la configuración de compilación en la máquina Linux remota.

Para cambiar la configuración predeterminada de CMake en Visual Studio 2017, elija CMake>Cambiar configuración de CMake>CMakeLists.txt en el menú principal. También puede hacer clic con el botón derecho en CMakeLists.txt en el Explorador de soluciones y elegir Cambiar configuración de CMake. Después, Visual Studio crea un archivo CMakeSettings.json en la carpeta raíz del proyecto. Si quiere hacer cambios, abra el archivo y modifíquelo directamente. Para obtener más información, vea Personalización de la configuración de CMake.

La configuración predeterminada de Linux-Debug en Visual Studio 2017 (y la versión 16.0 de Visual Studio 2019) tiene el aspecto siguiente:

{
  "configurations": [
    {
      "name": "Linux-Debug",
      "generator": "Unix Makefiles",
      "remoteMachineName": "${defaultRemoteMachineName}",
      "configurationType": "Debug",
      "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
      "cmakeExecutable": "/usr/local/bin/cmake",
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
      "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
      "remoteCopySources": true,
      "remoteCopySourcesOutputVerbosity": "Normal",
      "remoteCopySourcesConcurrentCopies": "10",
      "remoteCopySourcesMethod": "rsync",
      "remoteCopySourcesExclusionList": [
        ".vs",
        ".git"
      ],
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [
        "linux_x64"
      ]
    }
  ]
}

Para cambiar la configuración predeterminada de CMake en Visual Studio 2019 o versiones posteriores, en la barra de herramientas principal, abra el menú desplegable Configuración y seleccione Administrar configuraciones.

Captura de pantalla en la que se muestra el valor Administrar configuraciones de CMake resaltado en el menú desplegable de configuración.

Este comando abre el Editor de configuraciones de CMake, que puede usar para modificar el archivo CMakeSettings.json de la carpeta raíz del proyecto. También puede abrir el archivo con el editor JSON si hace clic en el botón Editar JSON en la parte superior derecha del diálogo Configuración de CMake. Para más información, vea Personalización de la configuración de CMake.

La configuración de Linux-Debug predeterminada en la versión 16.1 de Visual Studio 2019 y versiones posteriores tiene el aspecto siguiente:

{
  "configurations": [
    {
      "name": "Linux-GCC-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "cmakeExecutable": "cmake",
      "remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [ "linux_x64" ],
      "remoteMachineName": "${defaultRemoteMachineName}",
      "remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src",
      "remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}",
      "remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}",
      "remoteCopySources": true,
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "remoteCopySourcesMethod": "rsync",
      "variables": []
    }
  ]
}

En la versión 16.6 o posteriores de Visual Studio 2019, Ninja es el generador predeterminado para las configuraciones que tienen como destino un sistema remoto o WSL, en lugar de archivos Make de Unix. Para más información, consulte esta entrada en el blob del equipo de C++.

Para obtener más información sobre estos valores, consulte la referencia de CMakeSettings.json.

Al realizar una compilación:

  • Si el destino es un sistema remoto, Visual Studio elige el primer sistema remoto de la lista en Herramientas>Opciones>Multiplataforma>Administrador de conexiones de manera predeterminada para los destinos remotos.
  • Si no se encuentra ninguna conexión remota, se le pedirá que cree una. Para obtener más información, vea Conectarse al equipo Linux remoto.

Elija un destino de Linux

Al abrir la carpeta de un proyecto de CMake, Visual Studio analiza el archivo CMakeLists.txt y especifica un destino de Windows de x86-Debug. Para establecer un sistema Linux remoto como destino, cambiará la configuración del proyecto en función del compilador de Linux. Por ejemplo, si usa GCC en Linux y realiza la compilación con información de depuración, elija: Linux-GCC-Debug o Linux-GCC-Release.

Después de especificar un destino de Linux remoto, el origen se copia en el sistema remoto.

Después de seleccionar un destino, CMake se ejecuta automáticamente en el sistema Linux para generar la memoria caché de CMake correspondiente al proyecto:

Captura de pantalla de Visual Studio en la que se muestra la salida de Generar la caché de CMake en Linux.

Subsistema de Windows para Linux como destino

Si el destino es el Subsistema de Windows para Linux (WSL), no es necesario agregar una conexión remota.

Para tener WSL como destino, seleccione Administrar configuraciones en el menú desplegable de configuración de la barra de herramientas principal:

Configuraciones de CMake con la opción Administrar configuraciones seleccionada

Aparece la ventana CMakeSettings.json.

Cuadro de diálogo de configuración de CMake con el botón Más resaltado, que agrega la configuración seleccionada, que es Linux-GCC-debug.

Presione Agregar configuración (el botón verde "+") y, a continuación, elija Linux-GCC-Debug o Linux-GCC-Release si usa GCC. Use las variantes de Clang si usa el conjunto de herramientas de Clang/LLVM. Presione Seleccionar y, a continuación, Ctrl+S para guardar la configuración.

Versión 16.1 de Visual Studio 2019 Cuando el destino es WSL, Visual Studio no necesita copiar los archivos de origen ni mantener dos copias sincrónicas del árbol de compilación, porque el compilador de Linux tiene acceso directo a los archivos de origen en el sistema de archivos Windows montado.

IntelliSense

Para una mejor precisión, IntelliSense para C++ requiere acceso a los encabezados de C++ a los que hacen referencia los archivos de origen de C++. Visual Studio usa automáticamente los encabezados a los que hace referencia un proyecto de CMake de Linux a Windows para proporcionar una experiencia de IntelliSense de plena fidelidad. Para obtener más información, vea IntelliSense para los encabezados remotos.

Configuración regional

La configuración de idioma de Visual Studio no se propaga en los destinos de Linux porque Visual Studio no administra ni configura los paquetes instalados. Los mensajes que se muestran en la ventana de salida, como los errores de compilación, se muestran usando el idioma y la configuración regional del destino de Linux. Tendrá que configurar los destinos de Linux para la configuración regional que quiera.

Más opciones de configuración

Use la configuración siguiente para ejecutar comandos en el sistema Linux antes y después de compilar, y antes de la generación de CMake. Los valores pueden ser cualquier comando válido en el sistema remoto. La salida se canaliza de nuevo a Visual Studio.

{
      "remotePrebuildCommand": "",
      "remotePreGenerateCommand": "",
      "remotePostbuildCommand": "",
}

Pasos siguientes

Configuración de sesiones de depuración de CMake

Consulte también

Trabajar con propiedades de proyecto
Personalización de la configuración de CMake
Referencia de configuración predefinida de CMake