C++ a VSCode
Používvám již nějakou dobu VSCode editor v souvislosti s jakýmkoliv vývojem. VSCode je odlehčený bratříček Visual Studia. Začínám si ale pomalu myslet, že VSCode je vlastně mnohem komplexnější nástroj, než Visual Studio. A to díky možnosti doplňků, kterých je obrovské množství.
Tento článek píšu pro budoucí možnosti připomenutí, jak některá nastavení VSCode fungují. Každý specifický vývoj totiž ssebou nese nuntost konfigurace projektu v závislosti na tom, jaké technologie se pro projekt používají.
Když si nainstalujeme VSCode v jakémkoliv OS, je nutné do systému dodat kompilační nástrojový řetězec. Tím se zde nebudu zabývat. Stačí jen vědět, že potřebujeme v Linuxu např. GCC, CLang a ve Windows např. obecně velmi oblíbený MSYS2 s GCC, nebo cygwin, atd. Pro další podporu dalších funkcí ve VSCode se instalují přímo ve VSCode doplňky. Prohlížeč doplňků je přímo integrovaný v samotném VSCode, takže je celá správa programovacího zázemí poměrně intuitivní.
C++ a Cmake pro bobtnající projekty
Doplňky CMake, CMake Language Support, CMake Tools
Doplňky C/C++, C/C++ Clang Command Adapter, C/C++ Extension Pack, C/C++ Themes a případně další
Nový projekt, který bude sestavovat CMAKE, se dá vytvořit jednoduše pomocí CMake:Quick Start. VSCode nabízí speciální MENU pomocí kombinace kláves CTRL+SHIFT+P. Do tohoto menu můžeme psát příkazy. Napíšeme CMAKE:Quick Start.
Vyplníme vstupy pro které se nás to bude ptát a nový projekt s jedním souborem main.cpp se automaticky vytvoří. Následně již můžeme pomocí F7 zdroj sestavit a pomocí CTRL+F5 zdroj debugovat.
Pokud existuje projekt, který ke svému sestavení používá CMAKE, stačí vejít do složky tohoto projektu a pro otevření ve VSCode zadat příkaz code . (tečka je nutná), tečka zajistí, že se ve VSCode otevře workplace (pracovní místo) pro aktuální cestu, ve které se nacházíme, když VSCode spouštíme.
V případě, že se projekt sestavuje pomocí CMAKE. To poznáme také díky přítomnosti souboru CMakeLists.txt. Tak se nám v levé liště VSCode zobrazí logo CMake, kde máme další možnosti nastavení pomocí myši. Jedná se o výběr nástrojového řetězce (výběr kompileru) a přepínání např. typu kompilace, a některé další nastavení.
Ukázka konfigurace CMake, který ukazuje použití sestavování projektu.
cmake_minimum_required(VERSION 3.5.0)
project(glfw_opengl3 VERSION 0.1.0 LANGUAGES C CXX)
# ImGui se přitáhne jako submodule pomocí příkazu
# git submodule add https://github.com/ocornut/imgui.git
# závislosti: apt-get install libglfw-dev
# Pro windows https://thescienceofcode.com/imgui-quickstart/
# Add ImGui source files
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/../..)
file(GLOB IMGUI_SOURCES
${IMGUI_DIR}/*.cpp
${IMGUI_DIR}/backends/imgui_impl_glfw.cpp
${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp
)
# Include directories for ImGui
include_directories(${IMGUI_DIR})
include_directories(${IMGUI_DIR}/backends)
# Add executable with ImGui sources
add_executable(glfw_opengl3 main.cpp ${IMGUI_SOURCES})
# Link necessary libraries (e.g., OpenGL, GLFW)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
target_link_libraries(glfw_opengl3 OpenGL::GL glfw)
Toto je CMake konfigurace, která sestavuje projekt main.cpp závislý na další knihovně v umístění IMGUI_DIR. Zároveň k použití projektu je nutné také přilinkovat podporu pro OpenGl a glfw3. I když vypadá CMake velmi prapodivně, je to zatím to nejlepší, s čím jsem se pro sestavování projektů v C++ pro crossplatform setkal. Důrazně doporučuji se CMake naučit a pochopit jej jako jednu z prvních věcí v případě zahájení studia stát se vývojářem.
Samostatnou syntaxy jazyka CMake již najdeme přímo na webu CMake a s jednoduššími konstrukcemi mi může pomoci také LLM dnešní doby.
CMake se hodí pro projekty, které se postupně začnou rozrůstat a mi chceme, abychom měli robustní systém sestavování i v procesu zvětšování projektu a jeho součástí.
C++ ve VSCode pro projekty o pár souborech
Doplňky C/C++, C/C++ Clang Command Adapter, C/C++ Extension Pack, C/C++ Themes a případně další dle potřeby
Pro jednodušší a menší C/C++ projekty, které obsahují jeden, nebo několik málo dalších zdrojových souborů není nutné používat sofistikovaný sestavovací software, ale postačí nám jednoduchý ruční sestavovací mechanismus nabízející doplňky k VSCode zmíněné výše. Sestavování tak bude v naší režii.
Vytvoříme nový soubor main.cpp a vložíme do něj kód
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char *argv[], char* env[])
{
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
return 0;
}
Ve složce, kde se nachází náš zdrojový soubor main.cpp zavoláme VSCode příkazem code . a otevřeme tím náš pracovní prostor v samotném editoru VSCode.
Nyní, když máme náš pracovní prostor otevřený, klikneme na main.cpp a otevřeme jej v editoru. Následně stiskneme F5 a zobrazí se nám nabídka nástrojových řetězců.
Jeden vybereme
A máme hotovo. Automaticky se nám kód přeloží do binární podoby a kód se spustí. Níže je vidět i výstup přeloženého programu do konzole, která je ve VSCode integrovaná.
Takto jednoduše se může ve VSCode nový projekt pro C/C++ přeložit a spustit. Nastavení překladu a samotného projektu je konfigurováno v automaticky vytvořeném souboru tasks.json.
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++-13 build active file",
"command": "/usr/bin/g++-13",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
Další možnosti nastavení překladu jsou k nalezení přímo na podpoře pro editor VScode. Vše je velmi dobře sepsáno a dokumentace je poměrně jednoduše pochopitelná.
Toto je způsob, který se hodí pro opravdu jednoduché projekty. Pro složitější a zároveň do budoucna jednodušší správu větších projektů se obracím na CMake.
Oba startovací projekty jsem uložil a nahrál na web, takže si je můžeme stáhnout a rovnou použít.
C++ Cmake Projekt
C++ Projekt