2022-07-30

vak: (Default)
Сестра прислала видео из Канады: ежегодное родео в городке Medicine Hat. Вот где настоящая мужская работа. Это вам не биты на байты множить. 😀







vak: (Default)
Коротенько изложу здесь, как программировать на Си++ с конфигуратором CMake в графической среде разработки Visual Studio Code. Подробности смотрите в статье "Get started with CMake Tools on Linux".

Предисловие. Я по жизни много кодирую на Си и Си++. Честно скажу: как старпёр, я 95% времени провожу в простом редакторе LE и командной оболочке Bash Commander. Они для меня удобнее любой современной IDE. Нет, я не ретроград: люблю пробовать всякие современные прилады и навороты, от Emacs до Eclipse и ItelliJ. Однако не помогает оно мне в работе. Последние два года пользовался CLion для рефакторинга. Это пожалуй первый за 20 лет тул, который вписался в мою практику без отторжения. Но народ нынче хвалит VSCode, и она бесплатная в отличие от CLion. Мелочь, а приятно.

Проект Visual Studio Code появился внезапно, в 2015 году. Никто не ожидал такой щедрости от Микрософта: сбацать с нуля современную многоплатформенную среду разработки и выложить её в опенсорс под свободной лицензией MIT. Тысячи разработчиков подхватили проект, и по некоторым обзорам, сейчас 70% программистов во всём мире использует VSCode в качестве основного редактора. Да, замечу: никакого отношения к компилятору Visual Studio проект VSCode не имеет.

Я в основном работаю на Маке, поэтому в шпаргалке буду писать маковские обозначения клавиш, например ⇧⌘X. На Линуксе или Windows это будет Shift+Ctrl+X.

Установка

Устанавливаем Visual Studio Code.

Устанавливаем поддержку Си++. Вызываем VSCode. Нажимаем ⇧⌘X и в строке поиска вводим "c++". Кликаем на расширение "C/C++" от Microsoft и жмём Install.

Устанавливаем поддержку CMake. Нажимаем ⇧⌘X и в строке поиска вводим "cmake". Кликаем на расширение "CMake Tools" от Microsoft и жмём Install.

Проверьте, что у вас установлен компилятор Си. Попробуйте команду "gcc -v". При необходимости, установите компилятор.

Проверьте, что у вас установлен CMake. Попробуйте команду "cmake --version". Установите, если нужно.

Открываем существующий проект

Предположим, в папке hello у нас имеется проект, для простоты состоящий из двух файлов: main.cpp и CMakeLists.txt. Откроем этот проект в VSCode и скомпилируем его.

Файл main.cpp:
#include <iostream>

int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
Файл CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)
project(hello)

set(CMAKE_CXX_STANDARD 20)

add_executable(hello main.cpp)
Заходим в папку hello и вызываем VSCode. Я по привычке делаю это из командной строки:
$ cd hello
$ code .
Откроется окно Visual Studio code.

Если вы это делаете в первый раз - надо сделать поиск имеющихся компиляторов в вашей системе, для СMake. Нажмите ⇧⌘P и в строке поиска наберите "kit". Из списка выберите "CMake: Scan for Kits".

Перед сборкой проекта надо определиться: какой компилятор бы хотим задействовать, и в каком режиме компилировать.

Выбираем компилятор. Нажимаем ⇧⌘P и в строке поиска набираем "kit". Выбираем "CMake: Select a Kit". Из списка выбираем нужный компилятор. То же самое гораздо легче сделать, кликнув на строку статуса в нужном месте:



Дальше устанавливаем режим сборки. Нажимаем ⇧⌘P и выбираем "CMake: Select Variant". Из списка выбираем нужный режим сборки: Debug, Release или другой. Или легче кликнуть на строку статуса:


Компилируем

Жмём F7 или кликаем на "Build" в строке статуса. Протокол компиляции будет видно в табе "Output" в нижней правой части окна:
[main] Building folder: hello 
[build] Starting build
[proc] Executing command: /usr/local/bin/cmake --build /Users/vak/hello/build --config Debug --target all --
[build] [1/2 50% :: 0.747] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[build] [2/2 100% :: 0.804] Linking CXX executable hello
[build] Build finished with exit code 0
Интересно, что для сборки используется ninja вместо make. Впрочем, это можно перенастроить при желании.

Запускаем

Жмем ⇧F5 или кликаем на ▷ в строке статуса. Результат выполнения появится в табе "Terminal":
$ /Users/vak/hello/build/hello 
Hello, World!
В целом неплохо. Радует, что не возникает проблем с конфигурационными файлами CMake. Я пробовал навороченные проекты с нетривиальными штуками в скриптах CMakeLists.txt, и VSCode справлялся с ними на ура. Так что можно пользоваться.