Компиляция программ при помощи текстового редактора на примере Notepad++




Цель: Научиться компилировать программы из командной строки. Научиться компилировать из текстового редактора Notepad++ (вернее научиться писать скрипты и связывать их), создавать скрипты и макросы, устанавливать системные переменные.

Сам текстовый редактор ничего не компилирует и не запускает. Также как и IDE не компилирует. Компиляция происходит с помощью компилятора. Выполнение производится некоторой средой выполнения. Это может быть интерпретатор команд или среда выполнения.
При компиляции программы на C# упаковываются в сборки. Код на языке IL автоматически преобразуется в код для конкретного процессора. Что относится к java, то скомпилированные файлы .class выполняется виртуальной машиной Java. Файлы .java компилируются в бай-код, то есть некоторый промежуточный код. Компиляция в exe файл тоже производится компилятором.

.EXE (сокр. англ. executable — исполнимый) — расширение исполняемых файлов, применяемое в операционных системах DOS, Windows, Symbian OS, OS/2 и в некоторых других, соответствующее ряду форматов. Процесс получения exe файла состоит из следующих этапов: препроцессинг, ассемблирование, компилирование, линковка.

ОUT файлы — исполняемые файлы для UNIX-подобных операционных систем.
Файл может хранить исполняемый код, общую динамическую библиотеку или объектный код.

Терминология


Cmd.exe — интерпретатор командной строки (англ. command line interpreter) для операционных систем OS/2, Windows CE и для семейства операционных систем, базирующихся на Windows NT (англ. Windows NT-based). cmd.exe является аналогом COMMAND.COM

Те?кстовый проце?ссор — компьютерная программа, используемая для написания и модификации документов, компоновки макета текста и предварительного просмотра документов в том виде, в котором они будут напечатаны (свойство, известное как WYSIWYG).

Текстовые процессоры, в отличие от текстовых редакторов, имеют больше возможностей для форматирования текста, внедрения в него графики, формул, таблиц и других объектов.

Скрипт (сценарий) — это отдельные последовательности действий, созданные для автоматического выполнения задачи.
Интерфе?йс по?льзователя, он же по?льзовательский интерфейс (UI — англ. user interface) — интерфейс, обеспечивающий передачу информации между пользователем-человеком и программно-аппаратными компонентами компьютерной системы (ISO/IEC/IEEE 24765-2010).

GUI означает graphical user interface, графический интерфейс пользователя.
GUI состоит из одного или нескольких окон и каждое окно содержит один или несколько элементов управления.

SDK (от англ. software development kit) — набор средств разработки, который позволяет специалистам по программному обеспечению создавать приложения для определённого пакета программ, программного обеспечения базовых средств разработки, аппаратной платформы, компьютерной системы, игровых консолей, операционных систем и прочих платформ.

IDE (Integrated Development Environment) — интегрированная среда разработки программного обеспечения.

Переменная среды? (англ. environment variable) — текстовая переменная операционной системы, хранящая какую-либо информацию — например, данные о настройках системы.

Переменные среды? Windows делятся на две категории:
Переменные среды? пользователя — указывают путь до пользовательских каталогов.
Системные переменные — хранят данные о некоторых каталогах операционной системы и конфигурации компьютера.

Предпосылки


Для сборки проектов, в настоящее время часто используется командная строка.

Как это упрощает сборку? Дело в том, что вы можете создать командный файл с параметрами компилятора, с параметрами логирования, с параметрами получения ошибок и многими другими параметрами, которые будут автоматизировать вашу сборку. Плюсы такого подхода очевидны:
у вас не тратится время на загрузку тяжелой IDE, вы можете автоматизировать многие детали вашей сборки. Из командной строки могут быть доступны аргументы программы, которые недоступны из GUI. У GUI обычно меньше возможностей, потому как не все команды и аргументы будут предоставлены пользователю. Вы можете записать ваш скрипт(набор команд, логику и переменные) в отдельный файл и запускать при надобности.
К тому же такой подход даст вам более глубокое изучение и понимание того, что происходит во время выполнения. Вы сможете рассмотреть каждый шаг отдельно. Другой аспект, использование блокнота для компиляции, предоставляет вам возможность отлаживать и запускать небольшие куски кода без использования вашей тяжелой IDE. У вас в нужный момент может не оказаться установленной IDE и отсутсвовать подключение к интернет. В принципе вы можете использовать другой текстовый редактор, не Notepad++. Основная идея остается та же. В этой статье я опишу использование cmd Windows 10, Notepad++ и плагина NppExec. В предыдущих версиях Windows это тоже работает. Могут быть незначительные отличия. В данном вопросе вы можете разобраться самостоятельно.

Заметьте, это не призыв отказаться от удобных средств IDE. Хорошие, удобные IDE повышают производительность команды разработчиков. К сожалению, по тем или иным причинам не всегда существует возможность их использовать.

Скачать программы вы можете с официальных сайтов:
Notepad++: notepad-plus-plus.org
Исходники релизов программы: github.com/notepad-plus-plus/notepad-plus-plus/releases
Автор программы: Don HO, Senior Software Engineer
Биография \ Резюме автора: donho.github.io

Автор плагина: Vitaliy Dovgan
Помощь: Don HO, Jens Lorenz, Juha Nieminen,Joel Yulilouma

Новую версию NppExec вы можете скачать с сайта.

Новые версии Notepad++ поддерживают установку плагинов из репозиториев. Вам достаточно нажать в меню плагины/управление плагинами, в строке поиск набрать NppExec, отметить галочку и нажать кнопку установить. Если же вы пользуетесь более ранней версией npp, то вам следует скачать плагин и распаковать в папку plugins. Обычно она находится по пути ...Notepad++\plugins.

Версии NppExec: Unicode и ANSI
Разработчик рекомендует использовать Unicode версию.

Узнать версию NppExec: Плагины\NppExec\Help/About

Вначале рассмотрим компиляцию из командной строки.

Программа cmd в Windows находится по следующему пути:

%windir%\system32\cmd.exe

Выполнить программу можно нажав поиск cmd и нажав на приложение «командная строка» либо из меню «выполнить», набрав cmd.

Настройки консоли cmd




В левом верхнем углу нажмите на значке консоли и выберите «свойства» для изменения текущих свойств. Вы можете поменять ряд свойств консоли: цвет, шрифт, расположение.

Для изменения свойств по умолчанию выберите «значения по умолчанию».

Вы можете назначить горячие клавиши для вызова командной строки.

Для этого наберите в поиске cmd, щелкните на «Командная строка» правой кнопкой и выберите «перейти к расположению файла. Затем, правой кнопкой на расположении и свойства. Установите курсор в поле «Быстрый вызов» и нажмите на клавиатуре сочетание клавиш, например: Ctrl+Alt+T. Такое сочетание клавиш соответствует вызову терминала Linux Ubuntu и вам не нужно будет заучивать новое. Если хотите, можете задать свое сочетание клавиш. cmd будет вызываться от имени пользователя. Чтобы запустить cmd от имени администратора, нужно набрать cmd в поиске, щелкнуть на нем правой кнопкой мышки и выбрать «Запуск от имени администратора».

cmd.exe — файл, это часть системы, командный интерпретатор системы Windows.

Командный интерпретатор, интерпретатор командной строки — компьютерная программа, часть операционной системы, обеспечивающая базовые возможности управления компьютером посредством интерактивного ввода команд через интерфейс командной строки или последовательного исполнения пакетных командных файлов.


Ключи запуска cmd.exe:

/c исполняет команду, заданную строкой, и завершает работу приложения;
/k исполняет команду, заданную строкой, и продолжает работу приложения;
/a — устанавливает вывод в стандарте ANSI;
/u — устанавливает вывод в Юникоде;
/? — вывод справки в командной строке;
Для компиляции из командной строки, вам нужно знать минимальных набор команд.

Для более глубокого изучения вам, скорее всего, понадобятся такие понятия как:
Processes, Threads, Streams, Fibers, семафоры, мьютексы и так далее. Всё то, что связанно с многопоточностью и многозадачностью.

В этой небольшой статье, пока что, таких глубоких знаний не требуется.

Немного о переменных

Вы можете использовать переменные, которые относятся к переменным среды пользователя, к переменным cmd, к переменным программы Notepad++, к переменным плагина NppExec.
Aliases — в общем случае это псевдонимы переменных. Они могут быть использованы для задания короткого имени переменной в определенной области видимости.

В нашем контексте слово «команда» означает команда или программа. Получить список команд вы можете набрав в командной строке «help» без кавычек. Отобразится список команд с их описанием. Получить помощь по определенной команде, вы можете набрав «help имя_команды».

Компиляция программ java из командной строки


Для компиляции программ java, у вас на компьютере должна быть установлена jdk.
«Java Development Kit (сокращенно JDK) — бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac)». JDK включает стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE). В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки. Скачать её вы можете с сайта Oracle, либо выбрать OpenJDK. Существуют комплекты разработки приложений на Java других производителей, доступные для ряда платформ. Ссылка для скачивания jdk: jdk.java.net/archive

Вот несколько существующих на сегодняшний день jdk: Oracle JDK, OpenJDK by Oracle, AdoptOpenJDK, Red Hat OpenJDK, Azul Zulu, Amazon Corretto. Скачиваете и устанавливаете, в документации об установке всё подробно расписано. Если же вы уже используете IDE — интегрированную среду разработки с уже установленной JDK, то вам остается только найти её на вашем диске. Среды разработки либо включают в комплект поставки одну из версий JDK, либо требуют для своей работы предварительной инсталляции JDK на машине разработчика. Для компиляции и выполнения, вам потребуются файлы: javac.exe — для компиляции и java.exe — для выполнения программы. Заметьте jdk должна быть установлена, потому как при компиляции и выполнении используются ряд файлов ресурсов, таких как библиотеки классов, отладчик и другие ресурсы.

Компиляция из командной строки в упрощенном виде выглядит так:
javac HelloWorld.java
. Почему в упрощенном? Потому как мы не задаем полный путь к компилятору, полный путь к файлу, не указываем другие параметры, такие как имя выходного файла и другие.

Если вы просто выполните такую команду, предварительно ничего не настроив, то скорее всего вы получите ошибку: «javac не является внутренней или внешней командой, исполняемой программой или пакетным файлом». То есть ваша система «не знает» где находится javac и нам нужно явно указать где находится компилятор.

Об установке java читайте в официальной документации.

Где установлена java, вы можете узнать набрав команду в консоли:
where java


Пишем новую строчку:

c:\путь_к_файлу_javac\javac  HelloWorld.java
с:\папка_на_диске_первая\папка_на_диске_вторая\...\javac  HelloWorld.java

Здесь папка_на_диске_первая, папка_на_диске_вторая — это название ваших папок на диске.
То есть это полный путь до файла javac.

Скорее всего вы получите следующую ошибку:

javac: file not found: hello.java
Usage: javac <options> <source files>
use -help for a list of possible options

В этом случае javac сообщает нам, что нет такого файла hello.java и предлагает ознакомиться с опциями компилятора.

Мы можем решить эту проблему двумя путями. Перейти в каталог в терминале.

cd полный_путь_к_нашему_java_файлу

Либо указать полный путь при компиляции.

с:\папка_на_диске_первая\папка_на_диске_вторая\...\javac  с:\путь\HelloWorld.java

Здесь следует сделать уточнение, в данном случае я рассматриваю путь в системах Windows.
В других системах пути прописываются по другому. Более подробно смотрите документацию.

В случае успешной компиляции у вас в каталоге появится файл HelloWorld.class

Выполнить этот файл мы можем командой:

с:\папка_на_диске_первая\папка_на_диске_вторая\...\java -classpath . HelloWorld

В данном случае точка означает текущий пакет, текущий каталог.

В случае не указания -classpath, возможен вывод ошибки:

«Error: Could not find or load main class имя»

Если вы указываете в классе пакет, то вам при запуске скомпилированного файла нужно указать путь к пакету.

Мы с вами немного разобрались, как компилировать и запускать java программы из командной строки. Теперь нам нужно сделать тоже самое в Notepad++ при помощи плагина NppExec. Скачиваем и устанавливаем плагин, если он у нас еще не установлен и устанавливаем.

После правильной установки, плагин NppExec появится в меню «Плагины».

NppExec имеет свою собственную консоль наподобие CMD.
По умолчанию приглашение на ввод команд не отображается. Для показа\скрытия консоли выберите: Плагины\NppExec\Show console.
Для получения справки наберите в консоли help и нажмите Enter. Для получения более подробной информации об NppExec наберите в консоли: help npp_exec.

Из help:
Так что, вообще говоря, NppExec — это инструмент. Этот инструмент делает именно то, что вы говорите, без каких-либо предположений, без неявного вызова чего-либо и так далее.


Это может быть критичто при разработке, когда «родная», «умная» консоль о чем-то «догадывается», к примеру в какой системе она запущена и может подставлять свои «умные» значения.

Do _not_ use NPP_EXEC to start a batch file or an executable file in NppExec!


Не используйте команду npp_exec для старта exe файла или bat файла.
Цель NPP_EXEC — выполнить собственный скрипт.
Для старта стороннего приложения напечатайте:
application.exe // в этом случае exe файл с именем application.exe
batchfile.bat // в этом случае batch с именем«batchfile.bat»

Нам остается только создать настройки для компиляции и выполнения. Мы сделаем эти настройки отдельно. Создадим настройки «для компиляции» и создадим настройки «для компиляции и выполнения».

Настройка системных переменных


Для того чтобы не вводить каждый раз полный путь к программе, будь то компилятор,
компоновщик, система сборки и т.д., вы можете установить системные переменные.
Как задаются системные переменные? Вы можете задать их в графическом интерфейсе, из cmd, используя Power Shell, используя regedit.

Как задать системные переменные используя графический интерфейс

Свойства компьютера\Дополнительно\Переменные среды\Переменные среды пользователя для «имя пользователя». Здесь вы можете создать, либо отредактировать имеющуюся переменную среды.

Как задать переменную среды используя командную строку


Для задания переменных окружения, вам нужно иметь права администратора.

сmd

SET

— вывод текущих установленных переменных системного окружения. Команда выводит не полный список.

Другие переменные принимают свои значения динамически:

%CD% - принимает значение текущего каталога.
%DATE% — принимает значение текущей даты.
%TIME% — принимает значение текущего времени.
%RANDOM% — значение случайного числа в диапазоне между 0 и 32767.
%ERRORLEVEL% — текущее значение ERRORLEVEL, специальной переменной, которая используется в качестве признака результата выполнения программы.
%CMDEXTVERSION% значение версии расширенной обработки команд CMD.EXE.
%CMDCMDLINE% — раскрывается в исходную командную строку, которая вызвала командный процессор.

SET переменная=строка

переменная — Имя переменной среды.
строка — Строка символов, присваиваемая указанной переменной.

set имя_переменной

— Показывает текущее значение переменной с именем имя_переменной.

echo %имя_переменной% 

— Выводит значение переменной.

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

Для того чтобы переменные работали после перезагрузки, вам нужно добавить их в системный реестр (В случае использования систем линейки Windows). Они могут быть добавлены средствами GUI Windows:

Выберите Run или Выполнить(Клавиша Win+R)

control sysdm.cpl 


У вас отобразится окно свойств системы. Выберите «дополнительно» и «переменные среды».



Здесь есть два вида переменных среды. Это системные переменные и переменные среды пользователя. Переменные среды пользователя относятся к определенному пользователю системы и его системному окружению. Здесь вы можете задать переменную Path для быстрого доступа к часто используемым программам. Значение переменной представляет из себя строку.
Это набор путей разделенных символом ";".

Переменная среды? (англ. environment variable) — текстовая переменная операционной системы, хранящая какую-либо информацию — например, данные о настройках системы. Переменные среды? устанавливаются пользователем или сценариями оболочки.


Вы также можете сделать это с помощью утилиты командной строки для работы с реестром Windows — reg.

reg /?
— получение справки по данной утилите.

REG ADD <имя_раздела> [/v <имя_параметра> | /ve] [/t <тип>] [/s <разделитель>]
        [/d <данные>] [/f]
        [/reg:32 | /reg:64]

Пример использования скрипта для добавления системной переменой:

SET KEY=полный_путь_к_разделу_рееестра
SET PARM=имя_параметра

Эти переменные сохраняются до окончания текущей командной сессии либо до изменения значения в текущей сессии.

Чтобы добавить переменную path для текущего пользователя(текущий пользователь — пользователь имя которого вы использовали при входе в сеанс):

Устанавливаем значения переменных и используем их в команде

REG ADD ...

Значение Path указываем пути через точку с запятой.

SET KEY=HKEY_CURRENT_USER\Environment
SET PARAM=%systemdrive%\путь;d:\;
REG ADD %KEY% /v Path /d  %PARAM%

Нам нужно указать в значении PARAM все пути, которые у нас были уже установлены и путь к компилятору.

HKEY_CURRENT_USER — это ветка текущего пользователя в реестре.
Environment — здесь хранятся переменные среды.

Предупреждение: «Так вы работаете с системным реестром. Обязательно сделайте копию реестра и создайте контрольную точку восстановления вашей системы». Безопаснее будет устанавливать системные переменные и переменные среды пользователя штатными средствами.

Обязательно ознакомьтесь с материалами:

Как создать резервную копию и восстановить реестр в Windows
Применимо к: Windows 7, Windows 8.1, Windows 10 (Официальная поддержка Microsoft):
support.microsoft.com/ru-ru/help/322756

Создание точки восстановления системы
Применимо к: Windows 10
support.microsoft.com/ru-ru/help/4027538/windows-create-a-system-restore-point

mrt 
— запуск средства удаления вредоносных программ Malicious Software Removal Tool

Настройки NppExec в Notepad++


Открываем Nonepad++.
Нам нужно создать скрипты cmd.
Выбираем Плагины\NppExec\
Отключяем «Console Command History»;
Включаем «Save all files on execute»;
Включаем «Follow $(CURRENT_DIRECTORY)»

Выбираем Плагины\NppExec\Execute или нажимаем F6.



В открывшемся окне пишем:

cd "$(CURRENT_DIRECTORY)"
javac $(FILE_NAME)  

Нажимаем Save… и в поле ScriptNme пишем: CompileJava.
Данный скрипт будет выполнять наш код java.

Снова выбираем Плагины\NppExec\Execete или нажимаем F6.

cd "$(CURRENT_DIRECTORY)"   
java $(NAME_PART)

Нажимаем Save… и пишем имя «RunJava». Данный код, написанный выше, будет компилировать код Java.

Повторяем тоже самое и пишем (Для компиляции и выполнения):

cd "$(CURRENT_DIRECTORY)"
javac $(FILE_NAME)
if $(EXITCODE) !=0 goto exit
java $(NAME_PART)
:exit

Сохраняем как CompileAndRunJava.
Нажмем кнопку «ОК».

cd "$(CURRENT_DIRECTORY)"

— перейти в текущую папку. В данном случае текущей будет та папка, куда вы сохранили текстовый файл.

javac $(FILE_NAME) 

— компилировать файл с именем находящимся в переменной FILE_NAME.

В нашем случае это имя сохраненного файла. Далее следует условие.

if $(EXITCODE) !=0 goto exit 

— если наш код не возвратил нормальное завершение == 0, то выйти.

java $(NAME_PART) 

— выполнить наш скомпилированный файл.



Далее мы свяжем наши скрипты с макросами.

В Notepad++ выбираем Плагины (Plugins) \NppExec \Advanced options…

Ставим галочку напротив «Place to the Macros submenu». В раскрывающемся списке «Associated script:» выбираем нужный нам скрипт и даем ему имя в поле «Item Name». И нажимаем Add/Modify. Проделываем это для всех наших скриптов, нажимаем «Ок» и перезапускаем Notepad.

Решение проблем с неправильным выводом русских букв в консоли:
Плагины (Plugins)/ NppExec / Console Output

Ставим нужные нам кодировки ввода и вывода.

Отключение сообщений внутренней консоли: Плагины (Plugins) / NppExec / No internal messages.

В случае появления сообщение при выполнении файла ИмяНашегоКласса.class, о том что main не найден, просто меняем наш скрипт: То есть нам нужно указать либо полный путь к пакету либо указать текущий пакет символом «.».

У нас получится такой скрипт:

cd "$(CURRENT_DIRECTORY)"   
java . $(NAME_PART)

Если же cmd не находит файла javа, то указываем к нему полный путь.
ИмяДиска:\папка1\папка2\...\java. $(NAME_PART).

Слегка улучшим наш код:

npp_save 
cd "$(CURRENT_DIRECTORY)"
путь_к_javac\javac $(FILE_NAME) 
if $(EXITCODE) !=0 goto exit
путь_к_java\java . $(NAME_PART)
:exit 

Скрипт компиляции Perl:

 npp_save 
CD $(CURRENT_DIRECTORY)
perl.exe -c -w "$(FILE_NAME)" 

Объяснение скрипта:
npp_save — внутренняя команда npp, сохранить
CD $(CURRENT_DIRECTORY) — переход к текущей папке
perl.exe -c -w "$(FILE_NAME)" выполнение perl.exe -c -w
пример: perl.exe -c -w test.pl
-c означает compile, компилировать
-w означает warnings, выводить предупреждения

Скрипт для компиляции с#:


cd "$(CURRENT_DIRECTORY)"
Путь_к_csc\csc $(FILE_NAME)
if $(EXITCODE) !=0 goto exit
$(NAME_PART)
:exit

Здесь Путь_к_csc — это путь к вашему csc.exe
Обычно он выглядит так: %systemdrive%\Windows\Microsoft.NET\Framework64\версия\
Для 32-битной версии — Framework32. Вы можете не указывать полный путь, а добавить путь к вашей системной переменной.

Есть такая особенность cmd, когда вы меняете путь и указываете другой диск, то вы можете увидеть тот же самый путь. Кажется что ничего не происходит при выполнении команды:
 CD другой_диск:\папка1\папка2
.

Для смены диска вам нужно применять CD c ключем /D или явным образом указывать имя_диска: после ввода команды.

Пример 1:

cd e:\папка1\папка2
e:


Пример 2:

cd /D e:\папка1\папка2


здесь е — имя диска, которое отличается от текущего.

Методика выявления ошибок компиляции


У вас на этапе подготовки могут возникать различного рода ошибки и первое что вам нужно выяснить — это к чему относится ваша ошибка. То есть локализировать проблему. Для этого выясняем на каком уровне возникает проблема. Относится ли она к системе, к командной оболочке, к компилятору, текстовому редактору или к опечатке, ошибке в скрипте.

  1. Проверить запускается ли cmd и отрабатывают ли простейшие команды.
  2. Проверить ваш компилятор на предмет компиляции из командной строки.
  3. Проверить системные переменные
  4. Проверить установлен ли плагин NppExec
  5. Запускает ли он скрипты
  6. Связанны ли скрипты с макросами NppExec.
  7. Отрабатывают ли макросы совместно со скриптами.


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

Теперь, когда мы создали, отладили и наши скрипты, убедились, что они работают предсказуемо, создали макросы для них, мы можем связать их с клавишами быстрого вызова. Как это сделать?
Мы не назначили горячие клавиши при создании скриптов, потому как назначение их, клавиш быстрого вызова, в окне создания скрипта ограничены.



Нам не предоставляется большого выбора из сочетаний клавиш на клавиатуре. К тому-же данные комбинации клавиш у нас могут быть заняты. Сделать назначение горячих клавиш или клавиш быстрого вызова мы можем в меню: Максросы/Измен.соч.клав./Удалить макро.







Какие у вас могут быть резоны познакомиться с командной строкой?

Вам может быть не придется использовать её часто. Но знать о её существовании просто необходимо. Например, на начальном этапе обучения вам нужно познакомиться с опциями компилятора, компоновщика, системы сборки и протестировать их. Вам понадобятся знание того, какие аргументы и ключи принимает программа на входе и что она может возвращать.
Не всегда у вас будет возможность использовать умные и дорогие IDE. И не потому что они могут оказаться слишком дороги, а по той причине, что вы просто не сможете установить их на некоторые системы. В других системах этого могут требовать меры безопасности. Вам может понадобится протестировать каждый модуль, такой как компилятор, линковщик, компановщик, систему сборки, систему контроля версий отдельно. То есть каждую часть вашей системы разработки. Вам может понадобится проверить корректность их работы по отдельности. В некоторых случаях вам может понадобится использовать другой компилятор с вашей IDE или любой другой отдельный модуль. Собирание кубиков графического интерфейса в IDE не делает из вас программиста. Вам понадобятся знания языков, знания архитектуры, знание некоторых скриптов, математические знания и т.д, то есть умение использовать в работе многих инструментов. В различных терминалах и консолях командная строка работает по разному. Это зависит от вашей консоли или терминала. Общие принципы работы для некоторых схожи, но для некоторых могут отличаться очень сильно. Командная строка — это только дополнительный инструмент в ваших руках, а насколько вы его эффективно использовать зависит от вас. В случае, когда вы занимаетесь opensource проектом, вы сможете предоставить командные файлы вашим пользователям для сборки, для тестирования проекта, развертывания проекта и тд. Для команды разработчиков такой подход может помочь более эффективно взаимодействовать. При этом это может оказаться выходом за пределы «комфорта» и нести дополнительные риски. Но использование любых инструментов несет в себе риски, во многом это определяется надежностью инструментов и умением их использовать.

В чем преимущество такого подхода к компиляции? Для обучающихся это приобретение новых навыков работы с командной строкой и связывание кода скриптов с текстовым редактором, изучение компиляции из командной строки. Экономия времени на тестировании небольшого кода без загрузки тяжелых IDE. В некоторых случаях, когда нет возможности установить полноценную IDE такой подход может выручить. Изучение скриптов для командной строки позволяет компилировать из исходников там где вообще нет никакой возможности применять UI, например на серверах. И хотя там не будет возможности использовать текстовые редакторы типа Notepad++, будет возможность использовать текстовые процессоры типа vi, vim, emacs, nano и тд. Основные принципы работы остаются теми же.

Мы с вами, несколько обзорно, познакомились с компиляцией из командной строки, с написанием скриптов для этого, с заданием и использованием системных переменных,
со связыванием кода скриптов с макросами Notepad++, c внутренними переменными Notepad++. Надеюсь данная статья будет полезна обучающимся. Здесь я описал подробно общие методики. Прежде чем обращаться в службу поддержки или отправлять баги, вам следует самостоятельно все выяснить. Во многих случаях может оказаться, что это ваша ошибка или опечатка, а не инженеров разработчиков.

Современные IDE имеют собственные консоли или эмуляторы консолей. Так что вам не обязательно использовать cmd для сборки. К тому же кроме cmd существует достаточно много подобных инструментов. Изучение работы скриптов может помочь вам в будущем в освоении таких инструментов, как системы сборки, компиляторов, компоновщиков, линковщиков. К тому же некоторые SDK не предоставляют графического пользовательского интереса(GUI), использование GUI может быть запрещено политикой безопасности, так как несет дополнительные угрозы в критических для этого областях применения.

Надеюсь данная публикация будет полезной в освоении, расширении новых знаний и навыков.

<<< Мои публикации на Habr >>>

Полезные ссылки

Как создать резервную копию и восстановить реестр в Windows
Применимо к: Windows 7Windows 8.1Windows 10 (Офиальная поддержка Microsoft)
support.microsoft.com/ru-ru/help/322756

Материалы для дополнительного изучения


notepad-plus-plus.org

Управление Java classpath (UNIX и Mac OS X)

Управление Java classpath (Windows)

Java — the Java application launcher

Для ознакомления:
Избавляемся от «исторических причин» в cmd.exe
habr.com/ru/post/260991

Сравнение командных оболочек
ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D1%8B%D1%85_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%B5%D0%BA

Комментарии (33)


  1. MechanicZelenyy
    13.11.2019 00:45
    +2

    Чего только люди не делают, только что бы мануал к IDE не читать


  1. rezdm
    13.11.2019 01:29

    Ок, хеллоу уорлд собрался.

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


    1. pinnocio964
      13.11.2019 22:25
      -1

      mvn clean verify из notepad++?


      1. Ar20L80 Автор
        13.11.2019 22:30

        mvn verify и mvn install относится к системе сборки Maven. Какое отношение это может иметь к Notepad++? Ну если вы будете собирать Notepad++ системой сборки Maven или будете собирать мавеном из консоли Notepad++.
        С Maven работают в основном Java-разработчики, хотя есть плагины для интеграции с C/C++, Ruby, Scala, PHP и другими языками.


        1. pinnocio964
          13.11.2019 23:28

          Спасибо, я знаю, что такое maven. В статье, Вы описываете, как через nppexec в notepad++ собирать java-исходник. rezdm задается следующим шагом (что то сложнее уровня hello world), на что я и предложил, что можно сделать в notepad++ через nppexec вызов maven(gradle\ant раз уж мы про java), который соберет этот проект.
          Можно, но никакого смысла в этом нет. Это, как в той картинке про буханку хлеба, превращающуюся в автобус.


          1. Ar20L80 Автор
            14.11.2019 23:50

            Вы когда maven устанавливаете, вы его тестируете как-то?
            Вот вы установили. Вам же нужно его как-то протестировать? Что вы делаете? Запускаете из командной строки с аргументами. Как вы иначе проверите правильность его установки и работы? Или вы верите в то, что он изначально установился правильно? Вот вам и ответ. Ну использовать хотя-бы для тестирования правильности установки. И да можно собирать мавеном прямо из текстового редактора и скриптами.


  1. KvanTTT
    13.11.2019 02:07

    А зачем столько лишних телодвижений, когда есть бесплатная Visual Studio Community и VSCode? Ну и конечно же Rider (Idea), правда уже платные.


    1. Elufimov
      13.11.2019 07:19

      IntelliJ IDEA Community Edition бесплатна, и насколько я помню не имеет ограничений для коммерческого примерения.


    1. Siemargl
      13.11.2019 09:05

      Например, чтобы не замусоривать систему многогигабайтными монстрами для простых задач типа «проверить идею». Да и npp запускается мгновенно, не будем показывать пальцем.

      Впрочем для этого есть онлайн компиляторы, но вот со сторонними либами часто они работать не умеют.


      1. mistergrim
        13.11.2019 16:13

        VSCode весит мегабайт двести — не Notepad++, конечно, но монстром это назвать сложно.


    1. VioletGiraffe
      13.11.2019 20:38

      VS Code — отличная IDE для того, что в ней работает. Но вот когда понадобилось просто собрать все.срр файлы в папке и запустить на них указанный мной кастомный С++ компилятор с кастомными параметрами, я это в Code настроить не смог. Удалось только в Qt Creator, и то только через дурацкий CMake + ninja. А по этой статье, наверное, получилось бы как я хотел — напрямую, без лишнего хлама.


  1. DrPass
    13.11.2019 02:10

    Надеюсь данная публикация будет полезной в освоении, расширении новых знаний и навыков.

    Данная публикация будет наглядным примером, как можно расписать на пяти страницах решение вопроса, которому достаточно посвятить пару абзацев текста.


  1. apangin
    13.11.2019 02:42

    Начиная с Java 11 однофайловые программы можно запускать сразу без javac:

    java C:\path\to\HelloWorld.java
    


  1. xztau
    13.11.2019 07:57

    В заголовке слово пропущено.
    Компиляция программ с Божией помощью из Notepad++


  1. roboter
    13.11.2019 11:52

    1. Ar20L80 Автор
      13.11.2019 15:08

      Спасибо за ссылку и информацию. Там два релиза этого проекта Notepad++ для программиста было выпущено.
      github.com/simonsteele/pn/releases
      Самый недавний это 3 Dec 2016.
      Simon Steele работал над этим проектом 15 лет.


  1. Zenitchik
    13.11.2019 15:29

    NppExec — неудобная хреновина. Не поддерживает юникодные символы в выводе, и с управляющими последовательностями беда (вывод, который в ConEmu отображается раскрашенным — в NppExec остаётся монохромным).


    А по остальному — я не понял, причём здесь notepad++. Если я компилирую программу консольной утилитой, то какая разница, в каком редакторе я написал исходники?


    1. Ar20L80 Автор
      13.11.2019 16:36

      «Не поддерживает юникодные символы в выводе»
      В какой кодировке у вас исходники? Поставьте UTF-8. Вы путаете установки для системы для юникода, установки Notepad++ для исходников, установки консоли для юникода и установки преобразования символов из одной кодировки в другую в самом NppExec. Вы можете поставить без преобразования и он оставит у вас то что есть.

      Что касается ConEmu, то в Windows 10 вы можете использовать полноценную оболочку Bash вместо эмулятора консоли ConEmu.

      Раскрасить символы вывода можете и для cmd.

      Вы можете писать исходники в любом текстовом редакторе. И я вас не призываю использовать какой-то определенный. Но эта статья относится к Notepad++. Будет время, напишу про другой.


      1. Zenitchik
        13.11.2019 16:56

        Но эта статья относится к Notepad++.

        Вот именно это и непонятно. Каким образом эта статья относится к Notepad++? Разве что в смысле упоминания оного.


        Вы путаете установки для системы для юникода, установки Notepad++ для исходников, установки консоли для юникода и установки преобразования символов из одной кодировки в другую в самом NppExec. Вы можете поставить без преобразования и он оставит у вас то что есть.

        Нет не путаю. Исходники — в UTF-8, сообщение в консоль я пытаюсь выводить в ней же. Русские буквы — не отображаются. Собственно, поэтому я и снёс некогда NppExec.


        1. Ar20L80 Автор
          13.11.2019 18:15

          Спасибо за ваш интерес. В самом тексте исходника вы задаете кодировку?
          Ну например на c# это выглядит так:static void Main(){
          Console.OutputEncoding = System.Text.Encoding.UTF8;
          Вот мой вывод в консоле самого Notepad++
          <<< Process finished (PID=7912). (Exit code 0)
          IF: 0 !=0 goto exit
          HelloWorld
          Process started (PID=6364) >>>
          Привет
          ___________
          При этом я везде установил кодировку UTF-8.
          Далее в коде на с#, кроме вывода на консоль, я создал окно: MessageBox.Show(«Мир»);

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


          1. Zenitchik
            13.11.2019 19:27

            Извините. Это я облажался. Сейчас полез проверять, а у меня там строка в UTF-16, тогда как консоль — UTF-8 ждёт.
            Непонятно только, почему ConEmu такое жрёт и не давится. Как-то догадывается, что кодировка не та...


  1. yarick123
    13.11.2019 22:20

    Это конечно хорошо, представлять себе, как можно откомпилировать пару файлов. Но писать об этом статью, по-моему, как из пушки по воробьям. Развитие-то какое? Обычно нужно собирать проекты, состоящие из большого количества файлов с исходным кодом и библиотек. Да и после сборки частенько хочется тесты запускать,… а перед сборкой — анализатор качества исходного кода… Библиотеки, опять же, временами пересобирать приходится… Иногда свои патчи применять…

    Если хочется на уровне отдельных файлов с исходными текстами работать — посмотрите в сторону make, в частности — gnu make. Если на несколько уровней выше — то в сторону maven. На apache ant тоже можно глянуть, но я бы не советовал… А на ущербном cmd писать 1% от функциональности вышеуказанных кроссплатформенных инструментов — выделки, по-моему, не стоит…


    1. Ar20L80 Автор
      13.11.2019 22:53

      Можно конечно, накачать исходников и собрать всё своими руками. Не все разработчики занимаются maven, apache ant. У всех разные задачи. Здесь я показал наиболее простой путь к пониманию, как мне кажется. Но некоторые вещи требуют еще объяснений. cmd такой же инструмент, вы можете использовать удобные именно вам, вернее даже наиболее подходящие для ваших конкретных задач, которые вы решаете. Но для некоторых задач эти инструменты могут совсем не подойти. Здесь вас скорее всего смутило, то что я привожу в основном примеры на java. Нужно будет дописать на с++ или привести пример взаимодействия потоков и как это просто продемонстрировать с помощью cmd и собственной консоли NppExec.


      1. yarick123
        13.11.2019 23:37

        Мы, похоже, говорим о разном. Конечно, у всех разные задачи. Безусловно, используя что-либо, нужно понимать, как оно работает.

        Мне показалось лишь странным, описывать достаточно простые вещи в немаленькой статье. Хотя я не рассматривал данную статью как tutorial для NppExec.

        Ну а попытка донести информацию, что часто требуется нечто большее, чем компиляция пары-другой файлов, похоже, успехом не увенчалась.

        Здесь вас скорее всего смутило, то что я привожу в основном примеры на java

        Да нет, не смутило. Поэтому gnu make и упомянул.


      1. pinnocio964
        13.11.2019 23:40

        Здесь я показал наиболее простой путь к пониманию, как мне кажется.

        Простите, но к понимаю чего? Что если ты написал код в блокноте, то его можно скомпилировать вручную вызвав компилятор с параметрами в интерпритаторе командной строки?


    1. Ar20L80 Автор
      14.11.2019 00:47

      Насчет cmd — то без него как вы настроите, диагностируете систему? Будете использовать power shell? Как без cmd диагностировать систему, если большая часть утилит не имеет GUI?
      Будете подключаться из Linux? Так я выпиливаю ненужные мне части системы. Подсистема posix не нужна для нормальной работы, её вполне можно удалить. Будете использовать кучу стороннего софта и те утилиты с GIU которые есть в системе? Или руками лезть каждый раз в regedit?


      1. yarick123
        14.11.2019 02:57

        Вот моё утверждение:

        А на ущербном cmd писать 1% от функциональности вышеуказанных кроссплатформенных инструментов — выделки, по-моему, не стоит…
        Ваши вопросы как-то плохо к нему подходят. Если хотите поговорить о cmd, power shell,… etc. — давайте поговорим.
        Насчет cmd — то без него как вы настроите, диагностируете систему?… Как без cmd диагностировать систему, если большая часть утилит не имеет GUI?
        Скрипты настройки и диагностики могут быть на чём угодно, в том числе на cmd. Просто, на cmd лаконично без «подвыподвертов» у меня хоть сколько-нибудь серьёзной логики написать не получалось. Да и возможность обработки сигналов отсутствует… На том же bash это было существенно красивее. Я использовал и gnuwin, и cygwin, сейчас добавился wsl. На питоне подобную логику приходилось писать — тоже куда удобнее, чем на cmd. Но вас я не отговариваю.
        Будете использовать power shell?
        power shell я не люблю, поскольку нахожу его весьма тяжеловесным «на вкус и цвет»… Хотя он очень мощный. Правда, для кода, показанного в статье, power shell — по-моему, перебор.
        Будете подключаться из Linux?
        Мне не очень понятно, что вы имеете в виду. Мы же говорим о windows.
        Будете использовать кучу стороннего софта и те утилиты с GIU которые есть в системе?
        «кучу стороннего софта» — нет. Только набор удобных утилит, такой, например, как gnuwin. А «утилиты с GIU» для подобных задач сомнительны, да и часто не имеют api.
        Или руками лезть каждый раз в regedit?
        А тут вообще не понял. REG (\Windows\System32\reg.exe), которую вы используете, — это утилита, которую можно запускать откуда угодно. К cmd она прямого отношения не имеет. Кстати, для изменения мастер-копии переменных окружения, больше подходит утилита SETX. Хотя в рамках «компиляции программ с помощью Notepad++», потребность переписывать что-то в registry заставляет серьёзно задуматься об этой «компиляции». Если не хочется «вводить каждый раз полный путь к программе», в моей ситуации удобнее прописать эти данные в локальном файле конфигурации окружения проекта, поскольку, как правило, компиляторов стоит несколько версий.


  1. ZaitsXL
    13.11.2019 23:37

    что то перемудрили с переменными окружения, они далеко не всегда содержат какой-либо путь на файловой системе, системные и пользовательские переменные отличаются тем кто их видит — только данный пользователь или любой


    1. Ar20L80 Автор
      14.11.2019 00:48

      Здесь согласен. Доработаю.


      1. ZaitsXL
        14.11.2019 08:49

        и строго говоря название статьи не соответствует действительности: Notepad ничего не компилирует, даже с плагином, компилирует по прежнему javac/gcc/что вы там еще вызываете, просто консоль теперь встроена в редактор, как собсно и сделано во многих IDE


  1. IGR2014
    14.11.2019 11:51

    Ребят, я из мира линукс. Кто-то объяснит в чём вообще суть проблемы? [SARCASM]

    P.S. Такими успехами можно извратиться и в MS Word программы «компилировать».
    А вообще, для того чтоб не заниматься вот такой «эротикой» с командной строкой как раз и существуют CMake и другие системы сборки…


    1. Siemargl
      14.11.2019 15:10

      Вместо npp берем например, кроссплатформенного Джинна. Суть не меняется


  1. Ar20L80 Автор
    14.11.2019 14:01

    Не все «с пеленок» попадают в мир Линукс. К тому же с выходом разработок Microsoft и установок на Windows 10 терминалов различных ветвей Линукс, «грань» между системами будет стираться. В Линукс уже давно существует Wine. Если речь идет о некоторой «кросс платорменности», то разработчику приходится вникать в мир различных систем. К тому же некоторые системы, довольно дано сделанные, успешно продолжают жить, даже не всегда в том виде в каком они были выпущены. Разработки для этих систем продолжаются. Да и обратную совместимость никто не отменял. Компилировать программы из MS Word — это конечно утрированно. Речь идет о компиляции с использованием некоторого редактора кода на примере Notepad++. Это не обязательно должен быть Notepad++, в мире Linux вы успешно можете использовать более подходящий именно для вас. Идея только в том чтобы описать это всё в общих чертах. Вы не поверите, но некоторые начинали разработку своих IDE именно так.