Instación y configuración de vcpkg, raylib y Visual Studio Code en Linux
Published: 2022-02-22 21:50
Edited: 2022-03-09 00:16
En este artículo detallo cómo instalar vcpkg, raylib y Visual Studio Code en Ubuntu para cursar durante el primer cuatrimestre del 2022 la materia Algoritmos y Estructuras de Datos (22.08) del Instituto Tecnológico de Buenos Aires.
Aclaración inicial
Todos los comandos en este tutorial deben ser ejecutados como un usuario normal (es decir, como un no super usuario).
Si algún comando requiere privilegios elevados será indicado oportunamente o
utilizará sudo
.
Este artículo fue escrito y probado utilizando Ubuntu 22.04 LTS y Arch Linux.
Paquetes necesarios
Necesitamos varios paquetes. Están todos en este único comando para no preocuparnos por ello más adelante.
Ubuntu
Si estamos utilizando Ubuntu y derivados instalamos los siguientes paquetes:
1
2
sudo apt update
sudo apt install build-essential pkg-config cmake git curl zip unzip tar libgl1-mesa-dev libx11-dev libxcursor-dev libxinerama-dev libxrandr-dev libxi-dev libasound2-dev mesa-common-dev xorg-dev libglu1-mesa-dev libglfw3-dev
- build-essential, pkg-config, cmake: Herramientas de compilación básicas que se utilizarán a lo largo del cuatrimestre.
- git: Lo necesitamos para crear, clonar y manipular repositorios.
- curl, zip, unzip, tar: Dependencias de vcpkg. 1
- libgl1-mesa-dev, libx11-dev, libxcursor-dev, libxinerama-dev, libxrandr-dev, libxi-dev, libasound2-dev, mesa-common-dev, xorg-dev, libglu1-mesa-dev: Dependencias de raylib. 2
- libglfw3-dev: Biblioteca para OpenGL. La necesitamos para algunos levels.
Arch Linux
En Arch Linux y derivados:
1
2
sudo pacman -Syu
sudo pacman -S base-devel cmake git curl zip unzip tar glfw-x11 glfw-wayland libx11 libxcursor libxinerama libxrandr ninja vulkan-headers xorg-server-devel xorg-xinput
- base-devel, cmake: Herramientas de compilación básicas que se utilizarán a lo largo del cuatrimestre.
- git: Lo necesitamos para crear, clonar y manipular repositorios.
- curl, zip, unzip, tar: Dependencias de vcpkg. 1
- libx11, libxcursor, libxinerama, libxrandr, ninja, vulkan-headers, xorg-server-devel, xorg-xinput: Dependencias de raylib. 2
- glfw-x11, glfw-wayland: Biblioteca para OpenGL. La necesitamos para algunos levels.
vcpkg
Instalemos el gestor de paquetes que vamos a utilizar durante la cursada.
Para ello, ejecutamos los siguientes comandos:
1
2
3
4
5
6
mkdir ~/dev && cd ~/dev
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg/
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg integrate bash
Con estos comandos estamos:
-
mkdir ~/dev && cd ~/dev
: Creando (y luego accediendo) a la carpetadev
en nuestro$HOME
. -
git clone ...
: Obteniendo el código fuente de vcpkg del repositorio oficial. -
bootstrap-vcpkg.sh
: Instalando vcpkg. -
./vcpkg integrate install
: ‘‘Integrando’’ las bibliotecas. 3 -
./vcpkg integrate bash
Agregando autocompletado al presionar tab. Si nuestra shell es zsh podemos reemplazarbash
porzsh
en este comando. 4
¡IMPORTANTE!
Prestemos atención a que todos los comandos de vcpkg están siendo ejecutados desde la carpeta donde fue instalado de la siguiente manera:
./vcpkg <comando>
.Si quisiéramos ejecutar el gestor desde ‘cualquier carpeta’ deberíamos agregarlo a nuestro
$PATH
.
Instalando raylib
En Ubuntu, instalar raylib utilizando el archivo de vcpkg que viene por defecto trae muchos problemas al momento de compilar el programa. Para solucionarlos, modifiqué el archivo con las instrucciones de instalación de la biblioteca para vcpkg.
Vamos a reemplazar el archivo portfile.cmake
original de raylib en vcpkg con
la versión modificada. 5
Para ello, primero descargamos el nuevo portfile.cmake
desde
este link
(haciendo click derecho sobre el link -> Guardar cómo…) y lo guardamos en
un lugar de fácil acceso, por ejemplo, la carpeta ~/dev/
que creamos al
principio. 6
Como tenemos disponible cURL, podemos copiar la url del archivo modificado (de nuevo, haciendo click derecho sobre el link -> Copiar dirección) y ejecutando el siguiente comando desde nuestra terminal, reemplazando
<url a portfile.cmake>
apropiadamente.
1curl -o ~/dev/vcpkg/ports/raylib/portfile.cmake <url a portfile.cmake>
Si hacemos esto, podemos omitir el paso a continuación.
Ahora, desde una terminal, reemplazamos el archivo original con nuestra versión:
1
2
3
cd ~/dev/vcpkg
# Cambiar porfile.cmake por la dirección donde descargamos el archivo.
mv portfile.cmake ~/dev/vcpkg/ports/raylib/portfile.cmake
Y procedemos, ahora sí, a instalar raylib con vcpkg:
1
./vcpkg install raylib
Visual Studio Code
Instalación
La manera más rápida de instalar el editor de texto es entrar a la sección de
descargas del sitio oficial de Visual Studio
Code, descargar el archivo .deb
y
ejecutar en una terminal: 7
1
2
cd ~/Downloads # Cambiar por la ubicación donde se descargó el archivo
sudo apt install ./code_<version>.deb
Extensiones
Para poder utilizar C/C++ y CMake de manera amigable en Visual Studio Code, instalaremos la extensión C/C++ Extension Pack.
Para ello, vamos al menú de extensiones, desde el botón ubicado en la barra
lateral izquierda o presionando Ctrl+Shift+X
y buscamos la extensión por
su nombre. También podemos entrar a su
página en Visual Studio
Marketplace e instalarla
mediante el comando provisto.
CMake
Configuración global
Una vez instalado VS Code, abrimos el archivo de configuración.
Para ello, abrimos la paleta de comandos presionando Ctrl+Shift+P
y
seleccionamos Preferences: Open Settings (JSON)
en el menú que nos aparece.
Tip
Podemos escribir
settings json
para reducir las opciones.
Si la instalación es reciente, veremos un archivo vacío con un contenido similar al siguiente:
1
2
3
{
"workbench.colorTheme": "Default Dark+"
}
Entre las llaves ({ }
), agregamos la siguiente línea de código:
8
1
2
3
,"cmake.configureSettings": {
"CMAKE_TOOLCHAIN_FILE": "~/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"
}
Obteniendo un resultado similar al siguiente:
1
2
3
4
5
6
{
"workbench.colorTheme": "Default Dark+"
,"cmake.configureSettings": {
"CMAKE_TOOLCHAIN_FILE": "~/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"
}
}
Configuración por proyecto
Para trabajar más cómodos en VS Code, cuando iniciamos un proyecto podemos
abrir la paleta de comandos y ejecutar CMake: Configure
para que nos cree
un archivo CMakeLists.txt
y configure archivos extras en la carpeta build
.
Probando… probando…
Crear una nueva carpeta para nuestro proyecto de prueba y la abrimos con Visual Studio Code.
Tip
Si estamos en una terminal podemos abrir una carpeta con VS Code directamente utilizando
code <path>
. En particular, si estamos posicionados en la carpeta donde vamos a crear nuestro proyecto de prueba utilizamoscode .
para abrir el editor.
Crearemos dos archivos: main.cpp
y CMakeLists.txt
con el siguiente
contenido:
main.cpp
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// main.cpp
// Raylib [core] example
// Copyright (C) 2013-2016 Ramon Santamaria (@raysan5)
#include <raylib.h>
int main(void) {
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight,
"raylib [core] example - basic window");
SetTargetFPS(60);
// Game loop
while (!WindowShouldClose())
{
BeginDrawing();
ClearBackground(RAYWHITE);
DrawText("Congrats! You created your first window!",
190, 200, 20, LIGHTGRAY);
EndDrawing();
}
CloseWindow();
return 0;
}
CMakeLists.txt
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
project(raylib-example VERSION 0.1.0)
# From "Working with CMake" documentation:
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_CXX_STANDARD 11)
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
endif()
add_executable(ray-example main.cpp)
# Raylib
find_package(raylib CONFIG REQUIRED)
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
target_include_directories(ray-example PRIVATE ${RAYLIB_INCLUDE_DIRS})
target_link_libraries(ray-example PRIVATE ${RAYLIB_LIBRARIES})
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
target_link_libraries(ray-example PRIVATE raylib)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
target_link_libraries(ray-example PRIVATE raylib m ${CMAKE_DL_LIBS} pthread GL rt X11)
endif()
# From "Working with CMake" documentation:
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
target_link_libraries(ray-example PRIVATE "-framework IOKit")
target_link_libraries(ray-example PRIVATE "-framework Cocoa")
target_link_libraries(ray-example PRIVATE "-framework OpenGL")
endif()
La línea de configuración
1
target_link_libraries(main PRIVATE raylib m ${CMAKE_DL_LIBS} pthread GL rt X11)
es necesaria en Linux para indicarle al linker que debe utilizar las bibliotecas especificadas (raylib, math, pthread, etc).9
Para compilar nuestro proyecto de prueba, podemos presionar la tecla F7
y,
una vez compilado, Shift+F5
para ejecutarlo.
-
Al compilar raylib obtenemos el siguiente mensaje:
raylib currently requires the following libraries from the system package manager: libgl1-mesa-dev libx11-dev libxcursor-dev libxinerama-dev libxrandr-dev These can be installed on Ubuntu systems via sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxinerama-dev libxrandr-dev
Además, en la Wiki del repositorio oficial nos dicen que
You need to install some required libraries; ALSA for audio, Mesa for OpenGL accelerated graphics and X11 for windowing system.
-
This will implicitly add Include Directories, Link Directories, and Link Libraries for all packages installed with Vcpkg to all VS2015, VS2017 and VS2019 MSBuild projects. We also add a post-build action for executable projects that will analyze and copy any DLLs you need to the output folder, enabling a seamless F5 experience.
-
Si en el futuro deja de ser necesario este parche, podemos reestablecer los archivos originales de vcpkg descargándolos desde su ubicación en el repositorio de GitHub y reinstalando raylib. ↩
-
También podemos ver una copia en este sitio antes de descargarlo. ↩
-
Podemos obtener una lista de las distantas plataformas en este artículo. ↩