Компиляция кода в VS Code

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Всем привет, хочу поделится информацией о том, как можно компилировать плагины прямо в VS Code в пару нажатий кнопок.
Данный способ отличается от [vscode] Компилируем не отходя от кассы лишь тем, что не нужно создавать дополнительных папок/файлов, исходный файл может быть в любом месте на пк, и так, начнём:

1. Нажимаем Win + R или Выполнить в Пуске и вставляем это: %appdata%/Code/User
1604857188456.png


2. Создаём если нету файл tasks.json и открываем его через любой текстовый редактор, VS Code тоже сойдёт
1604857229408.png


3. Вставляем это в файл tasks.json и настраиваем
C-подобный:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.10",    // Название в выпадающем меню
            "type": "shell",
            "command": [
                "<путь к компилятору spcomp.exe> ${file} -i \"<путь к папке с инклюдами>\" -O2 -t4 -v2 -o ${fileDirname}/../plugins/${fileBasenameNoExtension}.smx"
                // Пример: "C:/Users/admin/Desktop/scripting/spcomp.exe ${file} -i \"C:/Users/admin/Desktop/scripting/include\" -O2 -t4 -v2 --o \"${fileDirname}\\${fileBasenameNoExtension}\""
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",  // Определяет то, как будет показан терминал. always - всегда будет показан, never - никогда не будет показан, silent - показан только если есть ерроры
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
Подробности о аргументах можно найти тут
C-подобный:
-a           Выходной код ассемблера
-D <путь>    Путь к активному каталогу
-e <имя>     Установить имя файла с ошибкой (тихая компиляция)
-H <hwnd>    Дескриптор окна для отправки уведомления о завершении
-h           Показать включенные пути к файлам
-i <имя>     Путь к папке с инклюдами
-l           Создать файл списка (только предварительная обработка)
-o <name>    Установить базовое имя выходного файла
-O <число>   Уровень оптимизации (по умолчанию = -O2)
    0 Без оптимизации
    2 Полные оптимизации
-p <имя>     Установить имя файла "префикса"
-t <num>     Размер отступа TAB (в позициях символов, по умолчанию = 8)
-v <число>   Уровень детализации; 0 = тихо, 1 = нормально, 2 = подробный (по умолчанию = 1)
-w <num>     Отключить конкретное предупреждение по его номеру
-z <число>   Уровень сжатия, по умолчанию = 9 (0 = нет, 1 = худший, 9 = лучший)
-E           Рассматривать предупреждения (warning) как ошибки (error)
- \          Используйте '\' для escape-символов
- ^          Используйте '^' для escape-символов
-; <+/->     Требуется точка с запятой в конце каждого оператора (по умолчанию = -)
sym = val    Определяет константу «sym» со значением «val»
sym =        Определить константу "sym" со значением 0

4. Для удобства, меняем сочетание клавиш для Выполнить задачу сборки на F8, или другую, удобную кнопку
1604861325392.png


5. В редакторе открываем нужный .sp файл и компилируем нажатием F8 (Ctrl + Shift + B по дефоту), если выпадает меню, то выбираем нужный компилятор и ждём окончения компиляции, после чего скомпилированный плагин будет лежать в той-же директории что и .sp
1604857268695.png
1604857307469.png


Бонус:
Можно установить расширение Error Lens, которое позволяет видеть проблемные участки кода прямо в строках
1604857512030.png
1604857421823.png



Вопрос - ответ:
Q - Что за подсведка кода?
A - Расширение Dark+ Material и синтаксис сурспавна
1604857637156.png
1604857668367.png


Q - Как сделать так, что бы скомпилированый плагин кидало в какую-то папку, к примеру исходник лежит в sourcemod/scripts а нужно скомпилировать исходник в sourcemod/plugins?
A - Нужно в tasts.json в блок Command заменить часть кода в конце на -o ${fileDirname}/../plugins/${fileBasenameNoExtension}.smx, при этом папка plugins должнать быть заранее создана, иначе компилятор крашнется!
Пример:
C:/Users/admin/Desktop/scripting/spcomp.exe ${file} -i \"C:/Users/admin/Desktop/scripting/include\" -O2 -t4 -v2 -o ${fileDirname}/../plugins/${fileBasenameNoExtension}.smx

Люди, которые дали мне знать что можно компилировать в VS Code:
@HolyHender
 
Последнее редактирование:

Young <

Now, finally free
Сообщения
1,263
Реакции
505
Перехожу с np++ на vscode. По-тихоньку осваиваюсь. Столкнулся с проблемой:

C-подобный:
C:\Users\Home\Desktop\Scripting\Sourcemod\1.10\6499\plugin.sp(38) : fatal error 184: 
cannot write to file: "C:\Users\Home\Desktop\Scripting\Sourcemod\1.10\6499/../plugins/plugin.smx"

Права на папку стоят, в чем может быть проблема?
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Перехожу с np++ на vscode. По-тихоньку осваиваюсь. Столкнулся с проблемой:

C-подобный:
C:\Users\Home\Desktop\Scripting\Sourcemod\1.10\6499\plugin.sp(38) : fatal error 184:
cannot write to file: "C:\Users\Home\Desktop\Scripting\Sourcemod\1.10\6499/../plugins/plugin.smx"

Права на папку стоят, в чем может быть проблема?
Папка C:\Users\Home\Desktop\Scripting\Sourcemod\1.10\plugins\ создана?
 

smoke96

Участник
Сообщения
1,134
Реакции
175
@iLoco Все отлично работает, но есть одно но если в пути к компилятору или файлу не важно, присутствует пробел, все ломается и не работает. Это как то можно исправить?
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@iLoco Все отлично работает, но есть одно но если в пути к компилятору или файлу не важно, присутствует пробел, все ломается и не работает. Это как то можно исправить?
"\Путь к компилятору"\
 

smoke96

Участник
Сообщения
1,134
Реакции
175
"\Путь к компилятору"\
Извиняюсь, пробелов в пути к компилятору нет, а вот если файл открываю для редактирования , и в путях к нему есть пробелы , тогда все ломается.
Сообщения автоматически склеены:

Compilation aborted.
1 Error.
Не удалось запустить процесс терминала "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:/VSCode/scripting/spcomp.exe" "C:\Users\Lol Petrovich\Desktop\connect_disconnect_info.sp" -i "C:/VSCode/scripting/include" -O2 -t4 -v2 -o C:/VSCode/plugins/connect_disconnect_info.smx" (код выхода: 1).
Сообщения автоматически склеены:

Строчка command выглядит так : "\"C:/VSCode/scripting/spcomp.exe\" ${file} -i \"C:/VSCode/scripting/include\" -O2 -t4 -v2 -o C:/VSCode/plugins/${fileBasenameNoExtension}.smx"
 
Последнее редактирование:

Banana

Участник
Сообщения
892
Реакции
113
Как отключить предупреждения компилятора? чтоб остались только ошибки если они есть..
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Как отключить предупреждения компилятора? чтоб остались только ошибки если они есть..
лучше не отключать предупреждения, плагин всё-ровно скомпилируется, но их лучше закрывать.
 

1mpulse

node index.js
Сообщения
122
Реакции
165
@iLoco
VS Code не видит сборку, уже все перепробовал. Есть идеи?

tasks.json:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.10",
            "type": "shell",
            "command": "C:/Users/1mpulse/Desktop/compiler/spcomp.exe ${file} -i \"C:/Users/1mpulse/Desktop/compiler/include\" -O2 -t4 -v2 -o ${fileDirname}//${fileBasenameNoExtension}",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
Сообщения автоматически склеены:

@iLoco
VS Code не видит сборку, уже все перепробовал. Есть идеи?

tasks.json:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.10",
            "type": "shell",
            "command": "C:/Users/1mpulse/Desktop/compiler/spcomp.exe ${file} -i \"C:/Users/1mpulse/Desktop/compiler/include\" -O2 -t4 -v2 -o ${fileDirname}//${fileBasenameNoExtension}",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
проблема решена, данный способ компиляции работает, только при открытой директории.
Если открыть 1 файл напрямую, то данный способ сборки НЕ сработает.
 
Последнее редактирование:

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@iLoco
VS Code не видит сборку, уже все перепробовал. Есть идеи?

tasks.json:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.10",
            "type": "shell",
            "command": "C:/Users/1mpulse/Desktop/compiler/spcomp.exe ${file} -i \"C:/Users/1mpulse/Desktop/compiler/include\" -O2 -t4 -v2 -o ${fileDirname}//${fileBasenameNoExtension}",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
Сообщения автоматически склеены:


проблема решена, данный способ компиляции работает, только при открытой директории.
Если открыть 1 файл напрямую, то данный способ сборки НЕ сработает.
Недавно была обнова vscode, где добавили обязательное требованние в открытой директории (пофиг какой), мне это не нравится, ибо у меня их две, а можно добавить только одну :C
 

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
@iLoco, Вопрос, допустим если я открою проект в "главной папке" SourcePawn/Project 1/plugin.sp то задача не будет выполнена, т.к в подпапке есть пробел, будет ошибка. Подскажите как исправить.
task.json
C-подобный:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.10",
            "type": "shell",
            "command": [
                "C:\\Users\\Sergey68\\Desktop\\SourcePawn\\compile\\spcomp.exe \"${file}\" -i C:\\Users\\Sergey68\\Desktop\\SourcePawn\\compile\\include; Copy-Item \"${fileDirname}\\${fileBasenameNoExtension}.smx\" -Destination \"C:\\Users\\Sergey68\\Desktop\\SourcePawn\""
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
 

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
Извиняюсь, пробелов в пути к компилятору нет, а вот если файл открываю для редактирования , и в путях к нему есть пробелы , тогда все ломается.
Сообщения автоматически склеены:

Compilation aborted.
1 Error.
Не удалось запустить процесс терминала "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:/VSCode/scripting/spcomp.exe" "C:\Users\Lol Petrovich\Desktop\connect_disconnect_info.sp" -i "C:/VSCode/scripting/include" -O2 -t4 -v2 -o C:/VSCode/plugins/connect_disconnect_info.smx" (код выхода: 1).
Сообщения автоматически склеены:

Строчка command выглядит так : "\"C:/VSCode/scripting/spcomp.exe\" ${file} -i \"C:/VSCode/scripting/include\" -O2 -t4 -v2 -o C:/VSCode/plugins/${fileBasenameNoExtension}.smx"
Поддерживаю, тоже ошибка
Compilation aborted.Процесс терминала "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command D:/Hentai/1.10scripting/spcomp.exe d:\Hentai\1.10scripting\Rimmer_VK.sp -i "D:/Hentai/1.10scripting/include" -O2 -t4 -v2 -o d:\Hentai\1.10scripting/../plugins/Rimmer_VK.smx" был завершен с кодом выхода 1.
Сообщения автоматически склеены:

Хз как, но оно решилось само.
 
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,027
Реакции
2,262
4. Для удобства, меняем сочетание клавиш для Выполнить задачу сборки на F8, или другую, удобную кнопку
Посмотреть вложение 66921
1. А это где найти?
2. Можно ли открывать файлы .sp (где бы они не находились) и сразу компилировать файлы на нужном соурсмоде (выбирать из списка на какой версии компилировать)
3. Как настроить обновление на гите ?
 

xstage

🏹
Сообщения
726
Реакции
754
Думаю лучше устанавливать расширение от этого автора

В отличие от того расширения, который предлагают в теме:
-У него есть распознавание методампов.
-Автоматически подсвечивает ошибки. В всплывающем окне есть информация об ошибке.
-Умеет разворачивает(циклы/условия), также легче заполнять информацию о плагине, он сгенерирует шаблон по ключевому слову - "myinfo".
-Так же не нужно теперь в каждом в файле подключать #include <sourcemod>, чтобы увидеть описание функций. (Не очень удобно было, когда плагин состоял из нескольких файлов).

1653942647138.png

Сообщения автоматически склеены:

example.gif
 
Последнее редактирование:

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
Поставил SM 1.11 не работает, работало все на 1.10
C-подобный:
D:/Hentai/scripting/spcomp.exe : Имя "D:/Hentai/scripting/spcomp.exe" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а
также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ D:/Hentai/scripting/spcomp.exe d:\Hentai\scripting1.10\achievements.s ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:/Hentai/scripting/spcomp.exe:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


task:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.10",    // Название в выпадающем меню
            "type": "shell",
            "command": [
                "D:/Hentai/scripting/spcomp.exe ${file} -i \"D:/Hentai/scripting/include\" -O2 -t4 -v2 -o ${fileDirname}/../plugins/${fileBasenameNoExtension}.smx"
                // Пример: "C:/Users/admin/Desktop/scripting/spcomp.exe ${file} -i \"C:/Users/admin/Desktop/scripting/include\" -O2 -t4 -v2 --o \"${fileDirname}\\${fileBasenameNoExtension}\""
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",  // Определяет то, как будет показан терминал. always - всегда будет показан, never - никогда не будет показан, silent - показан только если есть ерроры
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Поставил SM 1.11 не работает, работало все на 1.10
C-подобный:
D:/Hentai/scripting/spcomp.exe : Имя "D:/Hentai/scripting/spcomp.exe" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а
также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ D:/Hentai/scripting/spcomp.exe d:\Hentai\scripting1.10\achievements.s ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:/Hentai/scripting/spcomp.exe:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


task:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.10",    // Название в выпадающем меню
            "type": "shell",
            "command": [
                "D:/Hentai/scripting/spcomp.exe ${file} -i \"D:/Hentai/scripting/include\" -O2 -t4 -v2 -o ${fileDirname}/../plugins/${fileBasenameNoExtension}.smx"
                // Пример: "C:/Users/admin/Desktop/scripting/spcomp.exe ${file} -i \"C:/Users/admin/Desktop/scripting/include\" -O2 -t4 -v2 --o \"${fileDirname}\\${fileBasenameNoExtension}\""
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",  // Определяет то, как будет показан терминал. always - всегда будет показан, never - никогда не будет показан, silent - показан только если есть ерроры
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
у меня так
JSON:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.11",    // Ќазвание в выпадающем меню
            "type": "shell",
            "command": [
               "F:/LOCAL_CSGO/MAIN_SERVER/SERVERCSGO/csgo/addons/sourcemod/scripting/spcomp.exe ${file} -i \"F:/LOCAL_CSGO/MAIN_SERVER/ServerCSGO/csgo/addons/sourcemod/scripting/include\" -O2 -t4 -v2 -o F:/LOCAL_CSGO/MAIN_SERVER/SERVERCSGO/csgo/addons/sourcemod/plugins/${fileBasenameNoExtension}.smx"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",  // ќпредел¤ет то, как будет показан терминал. always - всегда будет показан, never - никогда не будет показан, silent - показан только если есть ерроры
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
 

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
у меня так
JSON:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "SM 1.11",    // Ќазвание в выпадающем меню
            "type": "shell",
            "command": [
               "F:/LOCAL_CSGO/MAIN_SERVER/SERVERCSGO/csgo/addons/sourcemod/scripting/spcomp.exe ${file} -i \"F:/LOCAL_CSGO/MAIN_SERVER/ServerCSGO/csgo/addons/sourcemod/scripting/include\" -O2 -t4 -v2 -o F:/LOCAL_CSGO/MAIN_SERVER/SERVERCSGO/csgo/addons/sourcemod/plugins/${fileBasenameNoExtension}.smx"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",  // ќпредел¤ет то, как будет показан терминал. always - всегда будет показан, never - никогда не будет показан, silent - показан только если есть ерроры
                "echo": false,
                "showReuseMessage": false,
                "clear": true,
                "focus": true
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
Не, все равно та же ошибка
 
Сверху Снизу