Вопрос о SciTE

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl___, 26 апр 2023.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Здравствуйте!
    SciTE позволяет компилировать ассемблерные файлы. В файле asm.properties нахожу строку отвечающую за компиляцию command.compile.$(file.patterns.asm)=nasm $(FileNameExt) правлю ее под себя command.compile.$(file.patterns.asm)=$(masm64)\bin\ml64 /Cp /c /I$(masm64)\include $(FileName).asm происходит компиляция и появляется obj-файл, но вот как в SciTE подключить вторую строку чтобы запустить линкер? :scratch_one-s_head:
     
  2. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    Не знаком с SciTE. Но спросил ваш вопрос у ChatGpt. Он ответил:

    Для того чтобы запустить линкер в SciTE после компиляции ассемблерного файла, вам нужно изменить файл asm.properties следующим образом:
    1. Добавьте следующую строку в конец файла:
    command.build.$(file.patterns.asm)=cd "$(FilePath)" && $(masm64)\bin\link /subsystem:console /defaultlib:kernel32.lib /entry:start $(FileName).obj /out:$(FileName).exe
    Эта строка содержит команду линковки с параметрами, такими как подсистема и библиотека по умолчанию.
    1. Сохраните файл asm.properties.
    2. Теперь при компиляции ассемблерного файла в SciTE будет создан .obj файл и запущена команда линковки для создания исполняемого файла .exe.
    Примечание: Убедитесь, что переменная $(masm64) указывает на правильный путь к вашей установке MASM64. Если необходимо, измените ее соответствующим образом.

    Может поможет.
     
    Mikl___ нравится это.
  3. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    Для того, чтобы добавить вторую строку и выполнить линковку, можно создать новую команду в файле asm.properties. Например, для линковки с помощью линкера link.exe из Visual Studio можно использовать следующую команду:
    Эта команда выполнит линковку объектного файла, созданного предыдущей командой компиляции, и создаст исполняемый файл с именем, соответствующим имени исходного файла с расширением .exe.
    Чтобы вызвать новую команду, можно добавить соответствующую опцию в меню Tools в SciTE. Для этого необходимо открыть файл SciTEGlobal.properties и добавить следующую строку:

    После этого новая команда будет доступна в меню Tools как "Link". При ее вызове произойдет линковка объектного файла.
     
    Mikl___ нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Application,
    а нельзя сделать компиляцию, линковку, запуск приложения одной строкой в меню?
     
  5. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    Да, можно создать одну команду, которая будет выполнять компиляцию, линковку и запуск приложения. Для этого нужно использовать последовательность команд, разделенных символом &, например:
    Эта команда выполнит компиляцию ассемблерного файла с помощью nasm, затем выполнит линковку с помощью link.exe и, наконец, запустит полученный исполняемый файл с помощью команды start.
    Чтобы вызвать эту команду из меню Tools, нужно добавить следующие строки в файл SciTEGlobal.properties:
    Теперь при выборе команды "Build and Run" из меню Tools будет выполнена компиляция, линковка и запуск приложения.
    --- Сообщение объединено, 26 апр 2023 ---
    Чтобы создать одну команду, которая будет выполнять компиляцию, линковку и запуск приложения, можно использовать последовательность команд, разделенных символом &, например:
    Эта команда выполнит компиляцию, линковку и запуск полученного исполняемого файла.
    Чтобы вызвать эту команду из меню Tools, нужно добавить следующие строки в файл SciTEGlobal.properties:
    Теперь при выборе команды "Build and Run" из меню Tools будет выполнена компиляция, линковка и запуск приложения.
     
    Mikl___ нравится это.
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Application,
    Похоже, что SciTE Версия 5.3.5 Scintilla:5.3.4 Lexilla:5.2.4 Mar 13 2023 14:19:28
    не понимает ни &, ни &&
     
  7. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Mikl___, не в тему, но похоже надо какой-то свой Иде кодить для масма; хотя мне нотепад++ норм, но для больших проектов он не очень
    ну или допиливать VScode
     
    mantissa и Mikl___ нравится это.
  8. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    Попробуйте использовать ; в качестве разделителя команд, вот так:

    обратный слеш \ в конце каждой строки, чтобы продолжить команду на следующей строке. Это делается для удобства чтения кода и не обязательно для правильной работы SciTE.
     
    Mikl___ нравится это.
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Application,
    я победил проклятое колдунство :drinks:
    masm64=диск:\папка1\подпапка2\...\masm64 // тут ваш путь к masm64
    command.compile.$(file.patterns.asm)=cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" \
    $(FileName).asm && $(masm64)\bin\link /LIBPATH:"$(masm64)\lib" /LARGEADDRESSAWARE:NO /BASE:0x400000 \
    /ALIGN:16 /entry:WinMain /SUBSYSTEM:WINDOWS /fixed /nocoffgrpinfo $(FileName).obj \
    && del $(FileName).obj && start $(FileName).exe
     
    mantissa, Marylin и Application нравится это.
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Application,
    интересно понимает ли SciTE условные конструкции при компиляции? То есть если в папке находится $(FileName).rc запускается компилятор ресурсов и при линковании добавляется $(FileName).res, а если нет компилятор ресурсов не запускается и при линковании не упоминается о $(FileName).res
     
  11. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    >>Chat gpt: Да, SciTE поддерживает условные конструкции при компиляции с помощью механизма переменных. Вам нужно использовать переменную $(FileName).rc для проверки наличия файла $(FileName).rc.
    Вот пример команд для компиляции ресурсов и линковки в зависимости от наличия файла $(FileName).rc:
    Здесь используется функция $(wildcard) для проверки наличия файла $(FileName).rc. Если файл есть, то выполняется компиляция ресурсов с помощью rc.exe из Microsoft Windows SDK. В противном случае компиляция ресурсов пропускается.

    Далее выполняется линковка, и в зависимости от наличия файла $(FileName).rc, переменная $(FileName).res может быть добавлена к списку объектных файлов, передаваемых в линкер. Если файл $(FileName).rc) не найден, то переменная не добавляется.

    Обратите внимание, что для проверки наличия файла $(FileName).rc используется механизм переменных $(wildcard(...)). Эта конструкция возвращает пустую строку, если файл не найден, и непустую строку, если файл существует.
     
    Mikl___ нравится это.
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Application,
    а могу я распарсить первую строку в $(FileName).asm на предмет наличия GUI/CONSOLE/DLL и поместить в какую-либо переменную, чтобы компиляция шла /SUBSYSTEM:CONSOLE /ENTRY:main либо /SUBSYSTEM:WINDOWS /ENTRY:WinMain либо /DLL /ENTRY: DllMain /DEF:$(FileName).def Пример первой строки в asm-файле
    Код (ASM):
    1. ; GUI #
    2. . . .
     
  13. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    >>Chat gpt: Да, можно распарсить первую строку в файле $(FileName).asm и использовать результат для задания параметров линкера.
    Вот пример команд для компиляции и линковки, которые могут использоваться для решения этой задачи:
    Здесь используется команда grep для поиска первой строки в файле $(FileName).asm, начинающейся с символа ';'. Затем эта строка обрабатывается с помощью команды sed, чтобы извлечь ключевые слова GUI, CONSOLE или DLL.
    Значения этих ключевых слов сохраняются в переменной MY_SUBSYSTEM. Затем переменная MY_ENTRY устанавливается в соответствии с типом подсистемы MY_SUBSYSTEM, используя условное выражение if. Далее чат gpt завис :)

    [​IMG]

    Попробую повторить запрос когда он придет в себя.
     
    Mikl___ и mantissa нравится это.
  14. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    да Notepad++ кайфовый, не могу от него отвыкнуть, с NppExec компилить супер удобно стало, но это когда один src файл, для проектов больших действительно сложновато будет, а в VS Code с коробки адекватная поддержка проводника + больше кастомизации от build скриптов, чем в NppExec, заняться бы этим и сделать все по красоте :yes3:
     
    Mikl___ нравится это.
  15. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    >>Chat gpt: Для этого можно использовать регулярные выражения и команду Python в файле asm.properties. Например, следующий код распарсит первую строку asm-файла и определит значение подсистемы Windows:

    В этом примере, регулярное выражение используется для извлечения значения подсистемы из первой строки asm-файла. Это значение затем сохраняется в переменной $(MY_SUBSYSTEM). В зависимости от значения переменной, параметры компиляции и линковки настраиваются соответствующим образом.
    --- Сообщение объединено, 27 апр 2023 ---
    В этом коде используется регулярное выражение для поиска первой строки, содержащей ключевые слова CONSOLE, WINDOWS или DLL. Если строка не найдена, то значение по умолчанию устанавливается как CONSOLE. Затем значение сохраняется в переменной MY_SUBSYSTEM и используется при компиляции и линковке.
     
    Mikl___ нравится это.