Konfiguracja pracy zdalnej i C/C++
Instalacja kompilatora
Jak ktoś chce pracować na własnym laptopie:
- Linux: kompilator
g++
i debuggergdb
praktycznie 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 --install
powinna 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.txt
linijkę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:
cd
do folderu zawierającego źródła iCMakeLists.txt
mkdir build
icd 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 Pack
w VS Code (ikonka w panelu na lewo), opcjonalnieClang-Tidy
iClang-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)