我在编写和运行notepad ++中的C代码时遇到问题。 我正在使用 nppexec 插件,并在按下F6后在脚本部分编写以下内容:
C:\MinGW\bin\gcc.exe -g "$(FULL_CURRENT_PATH)" -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
$(CURRENT_DIRECTORY)\$(NAME_PART).exe
按OK后,我在控制台上获得以下内容:
C:\MinGW\bin\gcc.exe -g "D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.C" -o "D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.exe"
Process started >>>
<<< Process finished. (Exit code 0)
D:\Silent\Documents\College Stuff\6th sem\NETWORKING lab\substitutioncypher.exe
Process started >>>
在这里,substitution.c
是我要运行的程序。问题是gcc部分工作正常但我无法从这里执行程序,因为没有响应。
如您所见,它只是表示流程已开始,之后没有任何内容。对按键没有响应,它只接受文本编辑器等所有内容。
如果我去工作目录并从那里执行程序(双击exe文件),那么它似乎运行得很好。问题似乎出现在我的脚本或插件中。
请问,任何人都可以找出我的编译和运行脚本有什么问题吗?
答案 0 :(得分:4)
除了@paxdiablo的回答之外,您还可以发现以下NppExec脚本用于单个文件项目:
npp_save
cd "$(CURRENT_DIRECTORY)"
cmd /c del "$(NAME_PART)".o "$(NAME_PART)".exe *.o
C:\MinGW\bin\gcc.exe -g3 -std=c89 -pedantic -Wall -Wextra -Wno-nonnull "$(NAME_PART)".c -o "$(NAME_PART)".exe
npp_run "$(NAME_PART)".exe
第1行保存当前在记事本++中处于活动状态的文档。
第二行确保您当前的目录是活动文档之一。这使您可以避免在其余行中使用"$(CURRENT_DIRECTORY)"
变量。
第3行删除以前成功编译的所有可执行文件和目标文件剩余部分。删除最后一个可执行文件是一个不错的主意,因为如果不这样做,那么最后一行将导致最后一次编译生成的.exe无论如何都会运行,即使您当前的编译失败也是如此。编译失败不会产生.exe,因此通常您不希望NppExec运行以前的.exe。删除以前生成的对象文件是可选的,但它确实不会影响新的编译(在多文件项目中更有意义,作为touch
命令行工具的替代)。
第4行编译活动文档。您可以根据需要随意修改gcc的选项。如果将C:\MinGW\bin
添加到Windows PATH
环境变量中,并假设您在系统上仅使用一个gcc安装,则可以跳过绝对路径,而只是编写gcc
。
最后一行执行生成的可执行文件。 npp_run
命令告诉NppExec启动一个新的命令提示符窗口,并在其中运行程序(除非它是一个WIN32 GUI程序)。与嵌入在notepad ++中的NppExec控制台相比,我个人觉得它更方便。它看起来更自然,也避免了NppExec控制台的一些I / O重定向问题。
但是,如果您的程序是一个不与用户交互的控制台应用程序通过循环说,那么这种方法将导致启动的命令提示符窗口在程序终止后立即关闭,而不是让您有机会检查它的输出。在这种情况下,您应该让程序等待用户在终止之前按下某个键。一种快速而肮脏的方法是将system("pause");
放在main()
函数的return
和/或exit()
语句之前(尽管写一个简单的十字架会好得多) -platform函数或宏())。
您可以在F6的<temporary script>
中输入以上脚本进行试验,并在您对其行为感到满意时将其永久保存以供一般使用。
另外,您可能会发现查看this post很有用,我试图解释如何设置NppExec以便它跳转到源代码中的相应行,通过双 - 在编译期间点击NppExec控制台中的任何错误gcc spits。