Здравствуйте! 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 подключить вторую строку чтобы запустить линкер?
Не знаком с SciTE. Но спросил ваш вопрос у ChatGpt. Он ответил: Для того чтобы запустить линкер в SciTE после компиляции ассемблерного файла, вам нужно изменить файл asm.properties следующим образом: Добавьте следующую строку в конец файла: command.build.$(file.patterns.asm)=cd "$(FilePath)" && $(masm64)\bin\link /subsystem:console /defaultlib:kernel32.lib /entry:start $(FileName).obj /out:$(FileName).exe Эта строка содержит команду линковки с параметрами, такими как подсистема и библиотека по умолчанию. Сохраните файл asm.properties. Теперь при компиляции ассемблерного файла в SciTE будет создан .obj файл и запущена команда линковки для создания исполняемого файла .exe. Примечание: Убедитесь, что переменная $(masm64) указывает на правильный путь к вашей установке MASM64. Если необходимо, измените ее соответствующим образом. Может поможет.
Для того, чтобы добавить вторую строку и выполнить линковку, можно создать новую команду в файле asm.properties. Например, для линковки с помощью линкера link.exe из Visual Studio можно использовать следующую команду: Эта команда выполнит линковку объектного файла, созданного предыдущей командой компиляции, и создаст исполняемый файл с именем, соответствующим имени исходного файла с расширением .exe. Чтобы вызвать новую команду, можно добавить соответствующую опцию в меню Tools в SciTE. Для этого необходимо открыть файл SciTEGlobal.properties и добавить следующую строку: После этого новая команда будет доступна в меню Tools как "Link". При ее вызове произойдет линковка объектного файла.
Да, можно создать одну команду, которая будет выполнять компиляцию, линковку и запуск приложения. Для этого нужно использовать последовательность команд, разделенных символом &, например: Эта команда выполнит компиляцию ассемблерного файла с помощью nasm, затем выполнит линковку с помощью link.exe и, наконец, запустит полученный исполняемый файл с помощью команды start. Чтобы вызвать эту команду из меню Tools, нужно добавить следующие строки в файл SciTEGlobal.properties: Теперь при выборе команды "Build and Run" из меню Tools будет выполнена компиляция, линковка и запуск приложения. --- Сообщение объединено, 26 апр 2023 --- Чтобы создать одну команду, которая будет выполнять компиляцию, линковку и запуск приложения, можно использовать последовательность команд, разделенных символом &, например: Эта команда выполнит компиляцию, линковку и запуск полученного исполняемого файла. Чтобы вызвать эту команду из меню Tools, нужно добавить следующие строки в файл SciTEGlobal.properties: Теперь при выборе команды "Build and Run" из меню Tools будет выполнена компиляция, линковка и запуск приложения.
Application, Похоже, что SciTE Версия 5.3.5 Scintilla:5.3.4 Lexilla:5.2.4 Mar 13 2023 14:19:28 не понимает ни &, ни &&
Mikl___, не в тему, но похоже надо какой-то свой Иде кодить для масма; хотя мне нотепад++ норм, но для больших проектов он не очень ну или допиливать VScode
Попробуйте использовать ; в качестве разделителя команд, вот так: обратный слеш \ в конце каждой строки, чтобы продолжить команду на следующей строке. Это делается для удобства чтения кода и не обязательно для правильной работы SciTE.
Application, я победил проклятое колдунство 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
Application, интересно понимает ли SciTE условные конструкции при компиляции? То есть если в папке находится $(FileName).rc → запускается компилятор ресурсов и при линковании добавляется $(FileName).res, а если нет → компилятор ресурсов не запускается и при линковании не упоминается о $(FileName).res
>>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(...)). Эта конструкция возвращает пустую строку, если файл не найден, и непустую строку, если файл существует.
Application, а могу я распарсить первую строку в $(FileName).asm на предмет наличия GUI/CONSOLE/DLL и поместить в какую-либо переменную, чтобы компиляция шла /SUBSYSTEM:CONSOLE /ENTRY:main либо /SUBSYSTEM:WINDOWS /ENTRY:WinMain либо /DLL /ENTRY: DllMain /DEF:$(FileName).def Пример первой строки в asm-файле Код (ASM): ; GUI # . . .
>>Chat gpt: Да, можно распарсить первую строку в файле $(FileName).asm и использовать результат для задания параметров линкера. Вот пример команд для компиляции и линковки, которые могут использоваться для решения этой задачи: Здесь используется команда grep для поиска первой строки в файле $(FileName).asm, начинающейся с символа ';'. Затем эта строка обрабатывается с помощью команды sed, чтобы извлечь ключевые слова GUI, CONSOLE или DLL. Значения этих ключевых слов сохраняются в переменной MY_SUBSYSTEM. Затем переменная MY_ENTRY устанавливается в соответствии с типом подсистемы MY_SUBSYSTEM, используя условное выражение if. Далее чат gpt завис Попробую повторить запрос когда он придет в себя.
да Notepad++ кайфовый, не могу от него отвыкнуть, с NppExec компилить супер удобно стало, но это когда один src файл, для проектов больших действительно сложновато будет, а в VS Code с коробки адекватная поддержка проводника + больше кастомизации от build скриптов, чем в NppExec, заняться бы этим и сделать все по красоте
>>Chat gpt: Для этого можно использовать регулярные выражения и команду Python в файле asm.properties. Например, следующий код распарсит первую строку asm-файла и определит значение подсистемы Windows: В этом примере, регулярное выражение используется для извлечения значения подсистемы из первой строки asm-файла. Это значение затем сохраняется в переменной $(MY_SUBSYSTEM). В зависимости от значения переменной, параметры компиляции и линковки настраиваются соответствующим образом. --- Сообщение объединено, 27 апр 2023 --- В этом коде используется регулярное выражение для поиска первой строки, содержащей ключевые слова CONSOLE, WINDOWS или DLL. Если строка не найдена, то значение по умолчанию устанавливается как CONSOLE. Затем значение сохраняется в переменной MY_SUBSYSTEM и используется при компиляции и линковке.