Компиляция программ с помощью из Notepad++

Компиляция программ с помощью Notepad++

dibu5sa--jvpi3gn5vkzcv0h7ka.jpeg

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

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

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, вы можете автоматизировать многие детали вашей сборки. Другой аспект, использование блокнота для компиляции, предоставляет вам возможность отлаживать и запускать небольшие куски кода без использования вашей тяжелой IDE. В принципе вы можете использовать другой текстовый редактор, не Notepad++.
В этой статье я опишу использование cmd Windows 10, Notepad++ и плагина NppExec.

Скачать их вы можете с официальных сайтов:
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 вы можете скачать с сайта:

sourceforge.net/projects/npp-plugins

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

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

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

%windir%\system32\cmd.exe

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

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

osphs4oes5w1f3v8epacwh5vjqu.jpeg
В левом верхнем углу нажмите на значке консоли и выберите «свойства» для изменения текущих свойств. Вы можете поменять ряд свойств консоли: цвет, шрифт, расположение.
Для изменения свойств по умолчанию выберите «значения по умолчанию».
Вы можете назначить горячие клавиши для вызова командной строки.
Для этого наберите в поиске cmd, щелкните на «Командная строка» правой кнопкой и выберите «перейти к расположению файла. Затем, правой кнопкой на расположении и свойства. Установите курсор в поле «Быстрый вызов» и нажмите на клавиатуре сочетание клавиш, например: Ctrl+Alt+T. Такое сочетание клавиш соответствует вызову терминала Linux Ubuntu и вам не нужно будет заучивать новое. Если хотите, можете задать свое сочетание клавиш.
Для компиляции из командной строки, вам нужно знать минимальных набор команд.
В нашем контексте слово «команда» означает команда или программа cmd. Получить список команд вы можете набрав в командной строке «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 читайте в официальной документации.
www.java.com/ru/download/help/index_installing.xml

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

where java

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

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

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

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

javac: file not found: hello.java
Usage: javac  
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 появится в меню «Плагины».
Нам остается только создать настройки для компиляции и выполнения. Мы сделаем эти настройки отдельно. Создадим настройки «для компиляции» и создадим настройки «для компиляции и выполнения».

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

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

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

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

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

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

сmd
SET

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

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

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

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


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

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

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

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

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

Для того чтобы переменные работали после перезагрузки, вам нужно добавить их в системный реестр (В случае использования систем линейки Windows).
Вы можете сделать это с помощью утилиты командной строки для работы с реестром 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 все пути, которые у нас были уже установлены и путь к компилятору.

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

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

Выбираем Плагины\NppExec\Execete или нажимаем 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. Вы можете не указывать полный путь, а добавить путь к вашей системной переменной.

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

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

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

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

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

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

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

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

notepad-plus-plus.org

Управление Java classpath (UNIX и Mac OS X):
www.ibm.com/developerworks/ru/library/j-classpath-unix

Управление Java classpath (Windows):
www.ibm.com/developerworks/ru/library/j-classpath-windows

Java — the Java application launcher:
docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html

© Habrahabr.ru