Work In Progress (WIP) 🚧
TL;DR:
- bibliotecile header-only le includem direct în repository
- le punem într-un folder separat ca să putem să ignorăm warnings din dependențe externe
- pentru bibliotecile care trebuie compilate, cel mai simplu mi se pare cu FetchContent: doar trebuie decomentat
apelul din CMakeLists.txt din repository-ul template și apoi decomentat caching-ul dependențelor din cmake.yml
include(FetchContent)
, apoi- pentru fiecare astfel de bibliotecă, pașii ar fi în CMakeLists.txt:
FetchContent_Declare(...)
FetchContent_MakeAvailable(...)
target_include_directories(...)
target_link_directories(...)
target_link_libraries(...)
- eventual
install(FILES ...)
În cazul în care dorim funcționalități mai avansate sau mai specifice față de ce ne oferă bibliotecile standard, va trebui să folosim biblioteci externe.
- ⚠ atenție! Codul obiect nu este portabil între sisteme de operare/compilatoare diferite!
Observații:
- unele biblioteci sunt gândite să fie legate doar static, altele doar dinamic, iar altele în ambele feluri (adică au o parte cu fișiere statice și alta cu fișiere dinamice)
- de verificat că licențele bibliotecilor pe care le folosim sunt compatibile cu licența proiectului nostru
Care este diferența dintre bibliotecile legate static și cele legate dinamic?
Bibliotecile statice sunt necesare atunci când compilăm codul, ceea ce înseamnă că vor crește dimensiunea executabilului. Bibliotecile dinamice sunt necesare numai atunci când rulăm programul.
În această secțiune, aș vrea să vă recomand doar biblioteci care sunt portabile.
- SFML: grafică, sunete (posibil să trebuiască schimbat DLL-ul de OpenAL pe Windows... sau nu)
- 🚧 secțiune incompletă
- rlutil pentru text colorat și jocuri în consolă, rang pt text colorat/subliniat
- am mai reușit să folosesc libpqxx, GLFW, SOIL (nu sunt sigur dacă asta e), SOIL2, indicators (bară de progres)
- la SIGIL nu mi-a mers sunetul (și are nevoie de un DLL din MSYS2)
- portable-file-dialogs: pop-ups, notificări; e nevoie de mici modificări pt a merge pe windows cu gcc
- cpr
- json parsing:
- nlohmann/json (am aflat de la @MihaiVoinea)
- dacă vreți performanță, recomand OjC
- crypto: digestpp pt hashing parole
- date calendaristice: date
- ?? https://github.com/vincentlaucsb/csv-parser
- ?? https://github.com/seleznevae/libfort
- cpp-terminal: terminal fancy; trebuie compilat, merge cu FetchContent; cam slab documentat
De încercat:
- Boost (??)
- raylib-cpp (recomandare din partea @meemknight)
- magic_enum
De unde mai puteți găsi biblioteci: căutați awesome c++, de exemplu aici
Pentru fișiere mari (minim câțiva MB), este recomandat să folosiți git-lfs
.
Astfel, dacă le modificați, pe repository-ul local veți avea o singură copie a acestor fișiere mari, însă
istoricul complet al modificărilor se va afla pe repository-ul remote (desigur, trebuie ca acesta să știe de lfs).