使用记事本++编译程序

使用文本编辑器(以记事本++为例)编译程序




目的:学习从命令行编译程序。 了解如何通过文本编辑器Notepad ++进行编译(或者更确切地说,学习如何编写脚本并将其链接),创建脚本和宏,设置系统变量。

文本编辑器本身不会编译或运行任何内容。 此外,IDE不会编译。 使用编译器进行编译。 执行由某些运行时完成。 它可以是命令解释器或运行时。
编译时,C#程序打包在程序集中。 IL代码会自动转换为特定处理器的代码。 对于Java,已编译的.class文件由Java虚拟机执行。 Java文件被编译成字节码,即一些中间代码。 exe文件中的编译也由编译器完成。

.EXE(英文英文可执行文件-可执行文件)-操作系统DOS,Windows,Symbian OS,OS / 2和其他一些文件中使用的可执行文件扩展名,对应于多种格式。 获取exe文件的过程包括以下步骤:预处理,汇编,编译,链接。

OUT文件-类似于UNIX的操作系统的可执行文件。
文件可以存储可执行代码,共享的动态库或目标代码。

术语学


Cmd.exe是OS / 2,Windows CE操作系统以及基于Windows NT(基于Windows NT)的操作系统家族的命令行解释器。 cmd.exe是COMMAND.COM的类似物

文本处理器是一种计算机程序,用于以打印文件的形式编写和修改文档,布局文本和预览文档(称为“所见即所得”的属性)。

与文本编辑器不同,字处理器具有更多用于格式化文本,嵌入图形,公式,表格和其他对象的选项。

脚本(脚本)是创建为自动完成任务的独立操作序列。
用户界面 ,也称为用户界面(UI),是一种在人类用户与计算机系统的硬件和软件组件之间进行信息传递的界面(ISO / IEC / IEEE 24765-2010)。

GUI代表图形用户界面。
一个GUI由一个或多个窗口组成,每个窗口包含一个或多个控件。

SDK(来自英语软件开发套件)是一组开发工具,可让软件专家为特定的软件包,基本开发软件,硬件平台,计算机系统,游戏机,操作系统和其他平台创建应用程序。

IDE(集成开发环境)是一个集成软件开发环境。

环境变量是操作系统的文本变量,用于存储一些信息,例如有关系统设置的数据。

Windows环境变量分为两类:
用户环境变量-指示用户目录的路径。
系统变量-存储有关操作系统和计算机配置的某些目录的数据。

背景知识


为了构建项目,现在经常使用命令行。

这如何简化组装? 事实是,您可以使用编译器选项,日志选项,错误设置和许多其他参数来自动创建一个批处理文件。 这种方法的优势显而易见:
您无需浪费时间加载沉重的IDE,就可以自动化程序集的许多细节。 从命令行,可以访问GUI中不可用的程序参数。 GUI通常具有较少的功能,因为并非所有命令和参数都将提供给用户。 您可以将脚本(一组命令,逻辑和变量)写入一个单独的文件,并在必要时运行它。
另外,这种方法将使您对运行时发生的事情有更深入的研究和了解。 您可以单独考虑每个步骤。 另一个方面,使用记事本进行编译,使您无需使用沉重的IDE即可调试和运行一小段代码。 您可能没有在正确的时间安装IDE,并且可能没有Internet连接。 基本上,您可以使用其他文本编辑器,而不是记事本++。 基本思想保持不变。 在本文中,我将介绍cmd Windows 10,记事本++和NppExec插件的使用。 在Windows的早期版本中,这也适用。 可能会有细微的差异。 您可以自己解决这个问题。

请注意,这并不是放弃便捷的IDE工具的要求。 良好,便捷的IDE可提高开发团队的生产力。 不幸的是,由于某种原因,并非总是可以使用它们。

您可以从官方网站下载程序:
记事本++: notepad-plus-plus.org
程序发布源: github.com/notepad-plus-plus/notepad-plus-plus/releases
程序作者:Don HO,高级软件工程师
传记\作者摘要: donho.imtqy.com

插件作者:Vitaliy Dovgan
帮助:唐Don,詹斯·洛伦兹,朱哈·涅米宁,乔尔·尤里卢马

您可以从站点下载 NppExec 新版本。

新版本的Notepad ++支持从存储库安装插件。 您只需要单击插件/插件管理菜单,在搜索栏中键入NppExec,选中相应的框,然后单击安装即可。 如果使用的是npp的早期版本,则应下载插件并将其解压缩到plugins文件夹中。 通常它在路上...记事本++ \插件。

NppExec版本:Unicode和ANSI
开发人员建议使用Unicode版本。

找出NppExec的版本:插件\ NppExec \帮助/关于

首先,考虑从命令行进行编译。

Windows上的cmd程序位于以下路径中:

%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-以Unicode设置输出;
/? -在命令行上输出帮助;
要从命令行进行编译,您需要了解最少的命令集。

对于更深入的研究,您很可能需要以下概念:
进程,线程,流,纤维,信号量,互斥量等。 与多线程和多任务相关的所有内容。

到目前为止,在这篇简短的文章中,并不需要如此丰富的知识。

关于变量的一点

您可以使用与用户环境变量,cmd变量,记事本++程序变量,NppExec插件变量相关的变量。
别名-通常,它们是变量的别名。 它们可用于在特定范围内指定简短的变量名。

在我们的上下文中,“团队”一词是指团队或计划。 您可以通过在命令行中键入“帮助”而不带引号来获得命令列表。 显示命令列表及其描述。 您可以通过键入“ help command_name”来获得有关特定命令的帮助。

从命令行编译Java程序


要编译Java程序,必须在计算机上安装jdk。
“ Java开发工具包(简称JDK)是Oracle公司(以前的Sun Microsystems)提供的免费Java应用程序开发工具包,其中包括Java编译器(javac)。” JDK包括标准Java类库,示例,文档,各种实用程序和Java Executive System(JRE)。 JDK不包含集成的Java开发环境,因此仅使用JDK的开发人员被迫使用外部文本编辑器,并使用命令行实用程序来编译其程序。 您可以从Oracle网站下载它,或选择OpenJDK。 有适用于许多平台的第三方Java应用程序开发工具包。 下载jdk的链接: jdk.java.net/archive

以下是一些目前存在的jdk:Oracle JDK,Oracle OpenJDK,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 

这里folder_on_ drive_first,folder_on_ drive_second是磁盘上文件夹的名称。
也就是说,这是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程序。 现在,我们需要使用NppExec插件在Notepad ++中执行相同的操作。 下载并安装插件(如果尚未安装并安装)。

正确安装后,NppExec插件将出现在“插件”菜单中。

NppExec具有自己的控制台,如CMD。
默认情况下,不显示命令提示符。 要显示\隐藏控制台,请选择:插件\ NppExec \显示控制台。
要获取帮助,请在控制台中键入help,然后按Enter。 有关NppExec的更多信息,请在控制台中键入:help npp_exec。

来自帮助:
因此,一般而言,NppExec是一种工具。 该工具可以完全按照您所说的进行操作,无需任何假设,也无需隐式调用任何内容,依此类推。


例如,在开发过程中,当“本机”,“智能”控制台“猜测”某些东西时,这可能很关键,例如,它在哪个系统上运行并可以替换其“智能”值。

请勿使用NPP_EXEC在NppExec中启动批处理文件或可执行文件!


不要使用npp_exec命令来启动exe文件或bat文件。
NPP_EXEC的目的是执行自己的脚本。
要启动第三方应用程序,请输入:
application.exe //在这种情况下为名为application.exe的exe文件
batchfile.bat //在这种情况下,使用名称“ batchfile.bat”进行批处理

我们只能创建用于编译和执行的设置。 我们将分别进行这些设置。 创建用于编译的设置,并创建用于编译和执行的设置。

设置系统变量


为了避免每次都输入程序的完整路径,无论是编译器,
链接器,构建系统等,则可以设置系统变量。
如何设置系统变量? 您可以使用Power Shell和regedit在cmd中的GUI中进行设置。

如何使用图形界面设置系统变量

“用户名”的计算机属性\高级\环境变量\用户环境变量。 在这里您可以创建或编辑现有的环境变量。

如何使用命令行设置环境变量


要设置环境变量,您需要具有管理员权限。

 md 

 SET 

-输出系统环境的当前已安装变量。 该命令不显示完整列表。

其他变量将动态获取其值:

%CD%-获取当前目录的值。
%DATE% -获取当前日期的值。
%TIME% -获取当前时间的值。
%RANDOM%是介于0和32767之间的随机数。
%ERRORLEVEL%-ERRORLEVEL的当前值,这是一个特殊变量,用作程序执行结果的标志。
扩展命令处理版本CMD.EXE的%CMDEXTVERSION%值。
%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

 SET = 

variable-环境变量的名称。
string-分配给指定变量的字符串。

 set _ 

-显示名为variable_name的变量的当前值。

 echo %_% 

-显示变量的值。

set命令设置的变量仅在设置它们的命令会话期间有效。 也就是说,变量将一直有效,直到当前用户会话结束或重新启动为止。

为了使变量在重新引导后起作用,您需要将它们添加到系统注册表中(如果使用Windows系统)。 可以使用Windows GUI添加它们:

选择运行或运行(Win + R键)

 control sysdm.cpl 


您将看到系统属性窗口。 选择高级和环境变量。



这里有两种环境变量。 这些是系统变量和用户环境变量。 用户环境变量是指系统及其系统环境的特定用户。 您可以在此处设置Path变量,以快速访问常用程序。 变量的值是一个字符串。
这是一组由“;”分隔的路径

环境变量是操作系统的文本变量,用于存储一些信息,例如有关系统设置的数据。 环境变量由用户或外壳程序脚本设置。


您也可以使用命令行实用程序来执行此操作,以使用Windows注册表reg

 reg /? 
-获得有关此实用程序的帮助。

 REG ADD <_> [/v <_> | /ve] [/t <>] [/s <>] [/d <>] [/f] [/reg:32 | /reg:64] 

使用脚本添加系统变量的示例:

 SET KEY=____ SET PARM=_ 

这些变量将一直保存到当前命令会话结束或当前会话中的值更改为止。

要为当前用户添加路径变量(当前用户是您在进入会话时使用其名称的用户):

我们设置变量的值并在命令中使用它们

 REG ADD ... 

路径值指示通过分号的路径。

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

我们需要在PARAM值中指示已经安装的所有路径以及到编译器的路径。

HKEY_CURRENT_USER是注册表中的当前用户分支。
环境-环境变量存储在这里。

警告:“这是您使用注册表的方式。 确保复制注册表并为您的系统创建恢复点。” 使用常规方法设置系统变量和用户环境变量将更加安全。

请务必检查以下材料:

如何在Windows中备份和还原注册表
适用于:Windows 7,Windows 8.1,Windows 10(Microsoft官方支持):
support.microsoft.com/en-us/help/322756

创建系统还原点
适用于:Windows 10
support.microsoft.com/ru-ru/help/4027538/windows-create-a-system-restore-point

 mrt 
-启动恶意软件删除工具

记事本++中的NppExec设置


打开Nonepad ++。
我们需要创建cmd脚本。
选择插件\ NppExec \
禁用“控制台命令历史记录”;
打开“执行时保存所有文件”;
启用“关注$(CURRENT_DIRECTORY)”

选择“插件” \“ NppExec” \“执行”或按F6。



在打开的窗口中,输入:

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

单击“保存...”,然后在ScriptNme字段中编写:CompileJava。
该脚本将执行我们的Java代码。

再次选择Plugins \ NppExec \ Execete或按F6。

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

单击“保存...”,然后输入名称“ 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) 

-执行我们的编译文件。



接下来,我们将脚本与宏连接。

在记事本++中,选择插件\ NppExec \高级选项...

选中“放置到宏子菜单”旁边的框。 在“关联脚本:”下拉列表中,选择我们需要的脚本,然后在“项目名称”字段中为其命名。 然后单击添加/修改。 我们对所有脚本执行此操作,单击“确定”并重新启动记事本。

解决控制台中俄语字母输出不正确的问题:
插件/ NppExec /控制台输出

我们放入所需的输入和输出编码。

禁用内部控制台消息:插件/ NppExec /无内部消息。

如果在执行文件OurClassName.class时发现未找到main的消息,则只需更改脚本即可:即,我们需要指定包的完整路径或用符号“。”表示当前包。

我们得到以下脚本:

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

如果cmd找不到Java文件,请指出该文件的完整路径。
DriveName:\ folder1 \ folder2 \ ... \ 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表示编译,编译
-w表示警告;发出警告

编译C#的脚本:

 cd "$(CURRENT_DIRECTORY)" __csc\csc $(FILE_NAME) if $(EXITCODE) !=0 goto exit $(NAME_PART) :exit 

cc_path是您的csc.exe的路径
通常看起来像这样:%systemdrive%\ Windows \ Microsoft.NET \ Framework64 \ version \
对于32位版本-Framework32。 您不能指定完整路径,但可以将路径添加到系统变量中。

cmd具有此功能,当您更改路径并指定其他驱动器时,您可以看到相同的路径。 执行命令时似乎什么也没发生:
  CD _:\1\2 


要更换磁盘,需要在输入命令后使用带有/ D开关的CD或明确指定drive_name:。

范例1:

 cd e:\1\2 e: 


范例2:

 cd /D e:\1\2 


这里e是与当前名称不同的驱动器名称。

编译错误检测技术


在准备阶段,您可能会遇到各种各样的错误,首先需要找出的是错误与之相关。 也就是说,定位问题。 为此,我们找出问题出现在什么级别。 它是指系统,命令外壳,编译器,文本编辑器还是错字(脚本错误)。

  1. 检查cmd是否正在运行以及最简单的命令是否可行。
  2. 从命令行检查编译器以进行编译。
  3. 检查系统变量
  4. 检查是否安装了NppExec插件
  5. 他是否运行脚本
  6. 脚本与NppExec宏相关吗?
  7. 宏与脚本一起工作吗?


有关编译错误的更详细输出,请参见您的构建系统,编译器和使用的其他模块的文档。

现在,我们已经创建,调试了脚本,并确保了脚本可预测地工作,并为它们创建了宏,我们可以将它们与快捷方式相关联。 怎么做?
创建脚本时,我们没有分配热键,因为在脚本创建窗口中对它们(即快捷键)的分配受到限制。



我们没有太多的键盘快捷键可供选择。 此外,这些组合键可能会让我们忙。 要分配热键或快捷键,我们可以在菜单中: Maxros / Change Keyword / Delete Macro







您可能有什么原因来了解命令行?

您可能不必经常使用它。 但是了解它的存在只是必要的。 例如,在培训的初始阶段,您需要熟悉编译器,链接器,构建系统的选项并进行测试。 您将需要知道程序在输入处接受哪些参数和键,以及它可以返回什么。
您将不会总是有机会使用智能且昂贵的IDE。 并不是因为它们可能太昂贵,而是因为您根本无法在某些系统上安装它们。 在其他系统中,安全措施可能需要这样做。 您可能需要分别测试每个模块,例如编译器,链接器,链接器,构建系统,版本控制系统。 也就是说,开发系统的每个部分。 您可能需要单独检查其工作的正确性。 在某些情况下,您可能需要将其他编译器与IDE或任何其他单独的模块一起使用。 在IDE中收集GUI多维数据集并不能使您成为一名程序员。您将需要语言知识,体系结构知识,一些脚本知识,数学知识等,即具有在工作中使用许多工具的能力。在不同的终端和控制台中,命令行的工作方式不同。这取决于您的控制台或终端。有些人的一般工作原理是相似的,但有些人的工作原理可能有很大不同。命令行只是您手中的附加工具,如何有效使用它取决于您自己。如果您从事的是开源项目,则可以将批处理文件提供给用户进行组装,测试项目,部署项目等。对于开发团队来说,这种方法可以帮助更有效地进行交互。而且,这可能超出了“舒适”的范围,并带来额外的风险。但是使用任何工具都会带来风险,在很多方面,这取决于工具的可靠性和使用能力。

这种编译方法的优点是什么?对于学生来说,这是新的命令行技能的学习,并将脚本代码与文本编辑器链接在一起,从而从命令行学习编译。通过测试小的代码而无需加载繁重的IDE来节省时间。在某些情况下,当无法建立完整的IDE时,此方法会有所帮助。通过研究命令行脚本,您可以从根本无法使用UI的源代码进行编译,例如在服务器上。尽管没有机会使用诸如Notepad ++之类的文本编辑器,但仍有机会使用vi,vim,emacs,nano等文字处理器。工作的基本原理保持不变。

您和我(从某种程度上来说)熟悉了命令行的编译,为此编写脚本,设置和使用系统变量,
具有Notepad ++宏的绑定脚本代码以及Notepad ++内部变量的过程。我希望本文对学生有用。在这里,我详细介绍了一般技术。在联系支持人员或发送错误之前,您应该自行查找。在很多情况下,这可能是您的错误或错别字,而不是开发工程师。

现代IDE具有自己的控制台或控制台仿真器。因此,您不必使用cmd进行构建。除了cmd,还有很多类似的工具。学习脚本的工作可以在将来帮助您掌握诸如构建系统,编译器,链接器,链接器之类的工具。此外,某些SDK不提供图形用户兴趣(GUI),安全策略可能会禁止使用GUI,因为它在关键应用程序中会带来其他威胁。

我希望该出版物对新知识和技能的开发,扩展有用。

<<<我在Habr上的出版物>>>

有用的链接

如何在Windows中备份和还原注册表
适用于:Windows 7Windows 8.1Windows 10(Microsoft官方支持)
support.microsoft.com/zh-cn/help/322756

进一步研究的材料


notepad-plus-plus.org

管理Java类路径(UNIX和Mac OS X)

管理Java类路径(Windows)

Java-Java应用程序启动器

供参考:摆脱
cmd.exe中的“历史原因”
habr.com/en/post/ 260991

命令Shell的比较
en.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

Source: https://habr.com/ru/post/zh-CN475590/


All Articles