Konfiguracja pracy zdalnej i C/C++
Instalacja kompilatora
Jak ktoś chce pracować na własnym laptopie:
- Linux: kompilator
g++i debuggergdbpraktycznie zawsze już jest, można dodać clang'a, clang-tidy i clang-format:- Ubuntu:
sudo apt install cmake clang clang-tools - Fedora:
sudo dnf install cmake clang clang-tools-extra
- Ubuntu:
- MacOS: w terminalu komenda
xcode-select --installpowinna zainstalować kompilatorclang++i debuggerlldb.
Windows Subsystem for Linux
Jak ktoś chce pracować lokalnie z Windowsa: z uwagi na to że nasze zajęcia dotyczą POSIXa (Linux i MacOS), najwygodniejszą opcją będzie WSL – to taka jakby instalacja Ubuntu (lub innej dystrybucji) do której ma się łatwy dostęp bezpośrednio z Windowsa (bez reboota).
Instalacja: wystarczy przejść do konsoli admina (menu Windowsa > PowerShell/Wiersz poleceń/Command Prompt > prawy klik "Uruchom jako administrator") i wpisać wsl --install.
Przed: warto zrobić Windows Update, po: być może trzeba uruchomić ponownie Windowsa. Potem uruchamiamy Ubuntu z menu Windowsa i mamy konsolę.
Powinno działać np. pwd, ps albo sudo apt update && sudo apt upgrade. Pewnie warto zainstalować jeszcze Windows Terminal.
Pliki z Linuksa można widzieć w Windowsie pod ścieżką \\wsl$\ (można też znaleźć "Linux" obok dysków w Explorerze).
Pliki z Windowsa można widzieć w Linuksie pod /mnt/c/Users/.
Wiele IDE pozwala łatwo korzystać z WSL, instrukcje są bardzo podobne jak do SSH, więc patrz niżej.
Praca zdalna przez SSH na students
Jak ktoś chce pracować przez ssh: dla przypomnienia domena to students.mimuw.edu.pl, użytkownik postaci: ab123456, hasło centralne. Czyli polecenie ssh ab123456@students.mimuw.edu.pl. Warto skonfigurować sobie klucze i sekcję Host w .ssh/config żeby wystarczyło na przykład ssh mim.
VS Code
Instalujemy wtyczki C/C++ Extension Pack w VS Code (ikonka w panelu na lewo), konkretnie chodzi o Remote - SSH (lub Remote - WSL).
Potem klikamy na zieloną ikonkę >< zupełnie w prawym dolnym rogu i Connect to Host...
CLion
W menu File > Settings > Build, Execution, Deployment > Toolchains dodajemy + nowy toolchain typu Remote Host (dla SSH; można też wybrać WSL).
Konfigurujemy połączenie (Credentials), resztę powinno wykryć samemu.
Stworzony toolchain albo ustawiamy jako domyślny (dla wszystkich projektów w CLion) przenosząc go wyżej na liście, albo wybieramy go dla konkretnego projektu (patrz CMake niżej) w File > Settings > Build, Execution, Deployment > CMake.
Zdalny terminal: Tools > Open Remote Host Terminal.
CMake
Do budowania projektów C++ zalecamy CMake, zresztą wiele IDE słabo wspiera inne opcje.
W IDE zazwyczaj wystarczy otworzyć folder zawierający plik CMakeLists.txt, tak jak folder z przykładami na Moodle'u.
- Aby dodać nowy plik wykonywalny jako cel budowania (target), dopisujemy w
CMakeLists.txtlinijkęadd_executable(foo foo.c)(czyli nazwa pliku wykonywalnego który ma powstać, po czym dowolna liczba plików źródłowych potrzebnych do kompilacji) - Aby dodać nową bibliotekę pomocniczą, dopisujemy
add_library(bar bar.c)oraztarget_link_libraries(foo bar)(gdzie foo to nazwa targetu — pliku wykonywalnego — który potrzebuje biblioteki bar).
Ręczne uruchamianie CMake
W razie czego:
cddo folderu zawierającego źródła iCMakeLists.txtmkdir buildicd build(ogólnie to może być dowolny folder gdziekolwiek)cmake ..(ogólnie uruchamiamy cmake z folderu gdzie mają być wyniki budowania, a podajemy mu folder zawierającyCMakeLists.txt)make
Po zmianach wystarczy powtarzać make.
Projekty CMake w VS Code
- Instalujemy wtyczki
C/C++ Extension Packw VS Code (ikonka w panelu na lewo), opcjonalnieClang-TidyiClang-Format - Otwieramy folder zawierający
CMakeLists.txt - Przyciski na dole (widoczność w Settings > cmake.options.statusBarVisibility) pozwalają nam kolejno:
CMake: [Debug]: Zmienić konfigurację na 'Release' (włącza optymalizacje, utrudnia debugowanie)🔧: Wybrać kompilatorBuild: Uruchomić budowanie projektu (skrótF7)[all]: Wybrać co chcemy budować (zazwyczaj 'all')🐞: Uruchomić z debuggerem (skrótF5)▶: Uruchomić bez debuggera (skrótShift+F5)[nazwa]: Wybrać target (plik wykonywalny – musi istnieć w CMakeLists.txt)