Tutorial de Cargo

En el desarrollo con Rust, casi todos los proyectos se gestionan y se construyen con Cargo, porque proporciona un flujo de trabajo conveniente y potentes funciones, lo que hace que el desarrollo en Rust sea más eficiente y fiable.

¿Qué es Cargo?

Cargo es el sistema de compilación y el gestor de paquetes oficial de Rust. Tiene principalmente dos funciones:

Tiene principalmente dos funciones:

  • Gestión de proyectos: Cargo se utiliza para crear, compilar y gestionar proyectos Rust. Con Cargo, puedes crear fácilmente nuevos proyectos, gestionar las dependencias del proyecto y realizar operaciones como compilar, ejecutar y probar el proyecto.

  • Gestor de paquetes: Cargo también actúa como gestor de paquetes de Rust. Permite a los desarrolladores introducir y gestionar dependencias (como bibliotecas de terceros) en el proyecto, y garantiza la gestión de versiones y la compatibilidad de dichas dependencias.

Principales características y funciones de Cargo:

  • Gestión de dependencias: Cargo, a través delCargo.tomlarchivo, gestiona las dependencias del proyecto. Este archivo enumera todas las bibliotecas externas necesarias para el proyecto y sus versiones.

  • Sistema de compilación: Cargo utiliza el compilador de Rust (rustc) para compilar el proyecto; se encarga automáticamente de la compilación y el enlazado de las dependencias.

  • Registro de paquetes: Cargo interactúa con elcrates.ioregistro de paquetes de la comunidad Rust, lo que permite a los desarrolladores buscar, añadir y gestionar bibliotecas de terceros.

  • Configuración de compilación: Mediante elCargo.tomlyCargo.lockarchivo, Cargo permite a los desarrolladores configurar opciones de compilación, como las opciones del compilador, las características (features) y las plataformas de destino.

  • Plantillas de proyecto: Cargo ofrece plantillas para crear nuevos proyectos, a través delcargo newcomando se puede iniciar rápidamente un nuevo proyecto.

  • Pruebas: Cargo proporciona un comando sencillocargo testpara ejecutar las pruebas unitarias del proyecto.

  • Benchmark: Cargo admite el uso delcargo benchcomando para realizar benchmarks.

  • Publicación: A través delcargo publishcomando, los desarrolladores pueden publicar sus bibliotecas en crates.io para que otros desarrolladores las utilicen.

  • Scripts de compilación personalizados: Cargo permite utilizar scripts de compilación personalizados para manejar necesidades de compilación más complejas.

  • Proyectos con múltiples objetivos: Cargo admite definir múltiples objetivos en un proyecto, como ejecutables, bibliotecas, pruebas y benchmarks.

  • Compilación multiplataforma: Cargo admite compilar programas Rust en múltiples plataformas, incluyendo Windows, macOS, Linux y varios sistemas embebidos.

  • Caché de compilación: Para acelerar la compilación, Cargo utiliza una caché de compilación para almacenar las dependencias compiladas.

  • Trabajo sin conexión: Cargo admite trabajar sin conexión a internet; utiliza automáticamente las dependencias de la caché local.

  • Sistema de plugins: Cargo permite a los desarrolladores escribir plugins para ampliar sus funciones.

  • Variables de entorno: Cargo admite sobrescribir el comportamiento predeterminado de compilación y ejecución mediante variables de entorno.

Funciones de Cargo

Además de crear proyectos, Cargo también tiene una serie de funciones como compilar (build) y ejecutar (run) el proyecto. La compilación y la ejecución se corresponden respectivamente con los siguientes comandos:

  • cargo new <project-name>: Crea un nuevo proyecto Rust.
  • cargo build: Compila el proyecto actual.
  • cargo run: Compila y ejecuta el proyecto actual.
  • cargo check: Comprueba los errores de sintaxis y de tipo del proyecto actual.
  • cargo test: Ejecuta las pruebas unitarias del proyecto actual.
  • cargo update: Actualiza las dependencias especificadas en Cargo.toml a la versión más reciente.
  • cargo --help: Muestra la información de ayuda de Cargo.
  • cargo publish: Publica el proyecto Rust en crates.io.
  • cargo clean: Limpia los archivos y directorios temporales generados durante el proceso de compilación.

Configurar un proyecto Rust en VSCode

Cargo es una buena herramienta de compilación. Si se combina VSCode con ella, VSCode se convertirá en un entorno de desarrollo muy conveniente.

En el capítulo anterior creamos el proyecto greeting. Ahora abrimos la carpeta greeting con VSCode (Nota: no es ejemplo-greeting)。

Después de abrir greeting, crea una nueva carpeta en su interior..vscode(Ten en cuenta el punto antes de .vscode; si esta carpeta ya existe, no es necesario crearla). En la nueva carpeta .vscode, crea dos archivos, tasks.json y launch.json, con el siguiente contenido:

Archivo tasks.json

{     "version": "2.0.0",     "tasks": [         {             "label": "build",             "type": "shell",             "command":"cargo",             "args": ["build"]         }     ] }

Archivo launch.json (aplicable en Windows)

{     "version": "0.2.0",     "configurations": [         {             "name": "(Windows) Iniciar",             "preLaunchTask": "build",             "type": "cppvsdbg",             "request": "launch",             "program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}.exe",             "args": [],             "stopAtEntry": false,             "cwd": "${workspaceFolder}",             "environment": [],             "externalConsole": false         }, {             "name": "(gdb) Iniciar",             "type": "cppdbg",             "request": "launch",             "program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}.exe",             "args": [],             "stopAtEntry": false,             "cwd": "${workspaceFolder}",             "environment": [],             "externalConsole": false,             "MIMode": "gdb",             "miDebuggerPath": "Aquí escribe el directorio donde se encuentra GDB",             "setupCommands": [                 {                     "description": "Habilitar la impresión ordenada para gdb",                     "text": "-enable-pretty-printing",                     "ignoreFailures": true                 }             ]         }     ] }

Archivo launch.json (aplicable en Linux)

{ "version": "0.2.0", "configurations": [ { "name": "Debug", "type": "gdb", "preLaunchTask": "build", "request": "launch", "target": "${workspaceFolder}/target/debug/${workspaceFolderBasename}",             "cwd": "${workspaceFolder}" } ] }

Archivo launch.json (aplicable en Mac OS)

{ "version": "0.2.0", "configurations": [ { "name": "(lldb) Iniciar", "type": "cppdbg", "preLaunchTask": "build", "request": "launch", "program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb" } ] }

Luego haz clic en "Ejecutar" en la barra izquierda de VSCode.

Si usas MSVC, selecciona "(Windows) Iniciar".

Si usas MinGW y tienes instalado GDB, selecciona "(gdb) Iniciar". Antes de iniciar GDB, asegúrate de completar el campo "miDebuggerPath" en launch.json.

El programa comenzará a ejecutarse en modo de depuración. La salida de la ejecución aparecerá en la "Consola de depuración":

Depurar Rust en VSCode

El método para depurar programas es similar al de otros entornos. Solo tienes que hacer clic en el punto rojo a la izquierda del número de línea para establecer un punto de interrupción. Durante la ejecución, el programa se pausa al encontrar un punto de interrupción, lo que permite al desarrollador supervisar el valor de las variables en tiempo real.

Otras extensiones