[vscode] Компилируем не отходя от кассы

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Информация в данной статье призвана сохранить лишние часы из-за старательного переноса исходного богокода на исполняемый файл компилятора.
Скажу сразу, способов и их вариаций не мало, использовался простейший пример.

1. Итак, для начала нам необходимо окружение, в котором мы будем работать, поэтому создадим папочку с нашим будущим прожектом.
В корень новоиспеченного проекта закинем spcomp.exe, создадим scripting & plugins. Рабочее пространство подготовлено.
sprog.png

2. Наполним наш прожект смыслом из пары строк бесполезного кода:
Some code:
#pragma newdecls required

public bool OnClientConnect(int client, char[] rejectmsg, int maxlen)
{
    return false;
}

3. Покуда наш чудо плагин готов, приступаем к компиляции
Для этого нам понадобится небольшой батник с заранее заготовленным кодом, так же лежащего в корне проекта
Допустим, нас не интересует какой файл компилировать и мы хотим компильнуть все и сразу:
@echo off
setlocal ENABLEDELAYEDEXPANSION

// Тут будем хранить путь до библиотек
set pINC=D:\Old\omg\Sourcemod\110\include
set cPATH=%cd%

if not exist = %pINC% close

copy /Y %cPATH%\scripting\include\ %pINC%\


(for /f delims^= %%i in ('dir /b %cPATH%\scripting\*.sp') do (
    spcomp -D%cPATH%\scripting -i%pINC% %%i
))

(for /f delims^= %%i in ('dir /b %cPATH%\scripting\*.smx') do (
    move %cPATH%\scripting\%%i ./plugins/
))

4. Покуда наш батник готов, то осталось пошаманить с VS
Пара действий:
  1. Ctrl+shift+d
  2. Create a launch.json file
C++:
{
    // Т.к. наш батник просто компилит все исходники из папки scripting
    // Достаточно будет одной конфигурации
    
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Скомпилить",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "compile.bat",
            "cwd": "${workspaceFolder}",
            "externalConsole": false
        }
    ]
}
5. Сохраняем и запускаем, и смотрим на итог компиляции.
end.png
 

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
Спасибо за такой способ)
Скажи пожалуйста, есть ли специальная подсветка под SourcePawn в VS или какая-нибудь альтернатива?
 

FurFur

Участник
Сообщения
153
Реакции
85
Лично для меня не подходит способ тса по различным причинам, в том числе из-за странной ошибки, на которую не нашел решение.
Вот мой способ: Компиляция плагина + перемещение его в нужную папку

1) Создаем батник в вашей рабочей директории и изменяем в нем путь на нужный:
PHP:
echo off

set sPATH=%cd%
set sFILE_NAME=%1

rem // Ниже ваш путь, куда должен быть перемещен скомпилированный файл
set PLUGINS="D:\Games\serw\serv\csgo\addons\sourcemod\plugins\"

"compile.exe" "%1"
move /Y "%sPATH%\compiled\%~n1.smx" "%PLUGINS%"

2)Переходим в Terminal -> Configure Tasks

1583990149017.png


Создаем таск с такой конфигурацией:

JSON:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile",
            "type": "shell",
            "command": ".\\compile.bat",
            "args": [
                "${fileBasename}"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

Готово. Жмем ctrl + shift + b для компиляции и перемещения плагина.
Либо Terminal -> Run Build Task.
Хоткей можно настроить по своему желанию

1583991401338.png
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #5
Я тут один напрямую на файл компилятора таргетился всегда в обход сомнительных батников? 🤣
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
Я использую следующий способ:
1. Создаю задачу:
C-подобный:
{
  "label": "smcomp",
  "type": "shell",
  "command": "путь_к_компилятору \"${file}\" -i путь_к_инклюдам_компилятора",
  "group": {
    "kind": "build",
    "isDefault": true
  }
}
2. Добавляю кейбинд:
C-подобный:
{
  "key": "ctrl+shift+c",
  "command": "workbench.action.tasks.runTask",
  "args": "smcomp"
}

И всё. Нажатие на ctrl+shift+c компилирует текущий открытый файл.
Так же я добавил копирование .smx в папку с плагинами (дописал command: Copy-Item \"${fileDirname}\\${fileBasenameNoExtension}.smx\" -Destination \"путь_к_папке_plugins\")
Плюс я использую плагин автоматической перезагрузки плагинов (вроде этот Plugin-autoreload - AlliedModders), который следит за файлами и перезагружает их автоматически, если они изменились (не нужно делать перезагрузку вручную или менять карту).

tasks.json:
C-подобный:
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "smcomp",
            "type": "shell",
            "command": "G:\\scripting\\sourcemod\\compiler\\spcomp.exe \"${file}\" -i G:\\scripting\\sourcemod\\compiler\\include; Copy-Item \"${fileDirname}\\${fileBasenameNoExtension}.smx\" -Destination \"G:\\Servers\\css-ds\\cstrike\\addons\\sourcemod\\plugins\"",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
keybindings.json:
C-подобный:
// Place your key bindings in this file to override the defaults
[
  {
    "key": "ctrl+shift+c",
    "command": "workbench.action.tasks.runTask",
    "args": "smcomp"
  }
]
 

DarklSide

Участник
Сообщения
931
Реакции
468
"command": "путь_к_компилятору \"${file}\" -i путь_к_инклюдам_компилятора",
В путях могут быть пробелы.

Можно воспользоваться аргументом -o компилятора
C-подобный:
>spcomp.exe
Usage:   spcomp <filename> [filename...] [options]
Options:
-o<name> set base name of (P-code) output file

Например:
-o=\"G:/Servers/css-ds/cstrike/addons/sourcemod/plugins/${fileBasenameNoExtension}.smx\"
 

Nekro

Терра инкогнита
Сообщения
4,027
Реакции
2,262
А вот скажем как сделать:
1. Открываем sp в любой папке пк
2. Есть возможность выбора версии sm (в каком либо всплывающем меню)
3. Компиляция на 1 кнопку
4. Файл smx падает в нужную папку из настроек
 

Похожие темы

Сверху Снизу