LINUX.ORG.RU

Как заставить VSCode собирать Си-проект через Makefile?

 , , , ,


0

4

Имеется готовый проект на языке Си. Для сборки в нем используется Makefile, который лежит в корне проекта.

Находясь в корне проекта я запускаю VSCode:

code .

Далее создаю каталог .vscode, в нем создаю файл tasks.json следующего содержания:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",
            "command": "make",
            "group": "build",
            "problemMatcher": []
        }
    ]
}

По идее, теперь при нажатии Ctrl+Shift+B должна происходить компиляция проекта.

Но ничего не происходит. Где в меню находится пункт Build или нечто подобное - я тоже не нашел.

Вопрос: как в VSCode запустить компиляцию проекта, который собирается командой make?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Ответ на: комментарий от LINUX-ORG-RU

Ему, видимо, надо отдельной кнопочкой, прям как в настоящей IDE, прям как настоящий программист. То есть проблема психологическая, а не техническая.

А так-то, конечно, в VSCode даже встроенный терминал есть, запускай свой make на здоровье сколько угодно.

Nervous ★★★★★
()

ctrl-k ctrl-s

это ну поймш

ctrl-p

а это командная строка среды - там как и в power toys символом префиксом (побей клаву для смены контекста) можно ускорятся

ээээх

qulinxao3 ★★
()

Я отдельно запускаю, там непонятно всё сделано, проще отдельно запускать. Если в терминале вскодовском запускаешь, то там и по ошибкам тыкать можно вроде.

vbr ★★★★
()

открой окно task log (ctrl+alt+win+T) либо через ctrl-k ctrl-p посмотри&|повесь

повтори свою ctrl-shift-b от туда же откуда «неполучалось»

сделай правильные вводы

qulinxao3 ★★
()

У тебя видимо в tasks.json каких-то нужных полей не хватает. Установи штатное расширение для C/C++ и почитай документацию отдельно по работе с тасками и отдельно по работе с C/C++:

https://code.visualstudio.com/docs/editor/tasks

https://code.visualstudio.com/docs/cpp/config-linux

Лучше всего не писать самому tasks.json с нуля, а сгенерировать его автоматически. Сделай Terminal -> Configure Default Build Task. Он тебе сгенерит минимальный шаблон tasks.json. Затем подправь его руками как тебе нужно. Сборка дефолтного таска делается как обычно по Ctrl+Shift+B. В результате должно получиться примерно вот это:

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++ build configuration",
      "command": "/usr/bin/make",
      "args": [
        "-j8"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "compiler: /usr/bin/g++"
    }
  ]
}

Для работы интеллисенса еще потребуется c_cpp_properties.json, а для отладчика launch.json. Все это подробно расписано в документации.

archie
()
Ответ на: комментарий от archie

Интелисенс и отладчик это понятно для чего, а вот этот tasks.json для чего? Чем это лучше, чем писать make в консоли?

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Чем это лучше, чем писать make в консоли?

Тем что вскод показывает тебе ошибки сборки в окошке PROBLEMS и ты можешь по ним прыгать. Простой запуск make в встроенном терминале ошибки НЕ показывает. Чтобы все работало как надо, нужно создать tasks.json и прописать там problemMatcher под конкретный компилятор:

"problemMatcher": ["$gcc"],

Тогда вскод будет парсить выхлоп сборочных тулзов типа make, находить там сообщения об ошибках/варнингах и показывать их в отдельном окошке.

Если у тебя правильно настроен интеллисенс, то ты можешь видеть ошибки и предупреждения от интеллисенса. Но вот именно ошибки сборки ты не увидишь без правильно настроенного tasks.json.

archie
()
Ответ на: комментарий от archie

Ясно, спасибо. У меня как-то так получается, что все ошибки с помощью интеллисенса получается исправлять ещё до билда, поэтому их особо и не бывает, а раз в день можно и руками найти.

vbr ★★★★
()
Ответ на: комментарий от anonymous

«компактный» редактор текстов на браузерном двигле

особо люб за

wsl cmd args* | code -

прст современная инкарнация «базового редактора»

с актуальными своему времени свистелками и сопелками дающее ощущение «лёгкости»

qulinxao3 ★★
()

После установки нужных плагинов(C/C++ т майков и подсветка для мейка) нужно создать 3 файла в папке .vscode

  1. launch.json с конфигурациями запуска которые можно будет переключать в панельке дебага, к слову для спортивного программирования или работы с одним файлом его будет достаточно
  2. tasks.json где описываются задачи компиляциии которые вызываются по ctrl+shift+b или по preLaunchTask в нужной конфигурации launch.json
  3. c_cpp_properties.json который не влияет на прямую на компиляцию и запуск, но где прописано куда помимо стандартной библиотеки смотреть анализатору кода, а также куча других параметров этого анализатора

Все можно сгенерировать в пару кликов, но для грамотной настройки надо будет править

nikitalol
()

На дворе 2024 год заканчивается а лоровцы ещё не выкинули make файлы, после случая с xz понятно же что портянки в виде make и m4 (а то голого мейка не хватает в сложном говнокоде) это моветон. Пора на нормальные системы сборки переходить те же cmake/qmake в разы лучше этой бороды.

peregrine ★★★★★
()
Ответ на: комментарий от Nervous

Вообще нафига сделали тогда этот ваш vscode если он даже проект по написанному ручками мейкфайлу из коробки собрать не может? Проще уж тогда терминал открыть и там в neovim-е всё сделать. Или там cmake стандартно идёт?

peregrine ★★★★★
()

Потому что у меня 32-х битный Intel Celeron M 630MHz 2007 года. C 512Mb ОЗУ.

Скорее всего все запускается, нужно только немножко подождать, думаю не больше пары дней.

anonymous
()
Ответ на: комментарий от peregrine

Или там cmake стандартно идёт?

Там стандартно только js да ts есть для всего остального надо расширения ставить. Если поставить расширения c/c++ и cmake, то все будет как в IDE.

anonymous
()
Ответ на: комментарий от lovesan

согласен. Вообще всё что связано с разработкой на C++/C это ссанина и говно. Но мейкфайлы хуже.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

cmake это просто настолько ублюдочный, нелогичный и кривой кусок говна, что MSBuild лучше него примерно в миллиард раз

создатели cmake могли скопировать его, могли скопировать ссаный жабовский ant, или же лисповые билд-системы, и брать из них примеры того как все делать красиво и по-умному, когда те развивались, но так как в С++ мирке адекватные, образованные и умные люди это редкость, то получили только вот это выродочное говно, обросшее костылями, несостыковками, конфликтующими фичами и прочим дерьмом, повторив путь становления и развития самого C++ - самого мерзкого и шизофренического языка из существующих - от осинки не родится апельсинка

lovesan ★★
()
Ответ на: комментарий от lovesan

Угу, простоте. Смотрел подробности бекдора в xz? Его как раз в эту простоту засунули, потому что там простота только пока проект маленький и без истории. Помнится когда лет 7 назад занимался опакечиванием уже правда не помню чего именно начитался мейкфайлов ручками писанных с комментариями и с таким говном внутри, что плакать хочется.

peregrine ★★★★★
()
Ответ на: комментарий от lovesan

MSBuild лучше него примерно в миллиард раз

Это тот который полагается на внешние тулзы которые конечно живы только в Windows и Visual Studio, что например, в случае C# мешает resx файлы для локализации использовать везде кроме Visual Studio, потому как файлик с названием Designer.cs генерится внешней тулзой и кроме того доисправляется Visual Studio в зависимости от галок в GUI последней? Плавали, знаем что это за говнина, ничуть не лучше и не адекватнее CMake. Единственное если всё просто и извращаться не надо, то оно просто работает (прямо как qmake в Qt Creator), а если к примеру надо что-то чуть экзотичнее чем тык-тык в студии (например портабельное приложение сделать которое ресурсы внутри себя хранит и не срёт длл-ками под себя) то тут такие финты ушами делать надо, что CMake нервно курит в сторонке.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)