5

我正在阅读http://daleswanson.blogspot.com/2012/07/how-to-compile-c-code-in-notepad-with.html并决定尝试一下,这样我就可以继续在 Notepad++ 中编写代码并具有更短的编译/运行周期。

当我尝试将编译/运行代码输入 NppExec 时,它不起作用。我现在的代码是:

npp_save
cd "$(C:\Users\Bart\Desktop\new delete me)"
g++ "$(test.cpp)" -o $(testme.exe) -march=native -O3
NPP_RUN $(testme.exe)

这是基于我给出的第一个链接:

npp_save
cd "$(CURRENT_DIRECTORY)"
g++ "$(FILE_NAME)" -o $(NAME_PART) -march=native -O3
NPP_RUN $(NAME_PART)

Notepad++ 在其控制台中为我提供了以下信息:

NPP_SAVE: C:\Users\Bart\Desktop\new delete me\test.cpp
CD: 
Current directory: C:\Program Files (x86)\Notepad++
g++ "" -o  -march=native -O3
CreateProcess() failed with error code 2:
The system cannot find the file specified.

NPP_RUN:
- empty command

从其他页面看来,我似乎只需要粘贴该代码,所有大写单词并不是要被替换,而是变量。所以我使用了这段代码:

npp_save
cd "$(CURRENT_DIRECTORY)"
g++ "$(FILE_NAME)" -o $(NAME_PART) -march=native -O3
NPP_RUN $(NAME_PART)

在 Notepad++ 控制台中给出了以下内容:

NPP_SAVE: C:\Users\Bart\Desktop\new delete me\test.cpp
CD: C:\Users\Bart\Desktop\new delete me
Current directory: C:\Users\Bart\Desktop\new delete me
g++ "test.cpp" -o test -march=native -O3
CreateProcess() failed with error code 2:
The system cannot find the file specified.

NPP_RUN: test
- the specified file was not found

这是我为完成设置所做的工作:

我从http://sourceforge.net/projects/mingw/files/下载了 mingw-get-setup.exe,它安装了 MinGW 安装管理器。然后我用它来安装 mingw32-gcc-++ 包,以及 mingw32-libz.dll 和 mingw32-libz.dev 包

在 Notepad++ 中,我使用插件管理器来安装 NppExec 插件。

我可以通过首先在命令窗口中手动编译来运行我的代码。Notepad++ 抱怨它缺少一个库,所以我在编译时使用了以下标志: g++ test.cpp -static-libgcc -static-libstdc++

如果我在 Notepad++ 中按 F5(或单击运行菜单中的运行),我可以选择从我的命令行编译创建的 a.exe 文件,它会弹出一个命令窗口并运行该代码,这样就可以正常工作了。

但是当我尝试自动化编译/运行时,似乎我的更改目录命令在 NppExec 中由于某种原因不起作用。

这是我发现的其他一些 stackoverflow 帖子,它们解决了类似的问题,但似乎不适用于我。我没有任何积分,所以我无法回复其中任何一个:

好吧,看起来我链接到的第一篇文章有​​一个部分解决方案——它看起来(尽管在文章名称中提到了 c 文件)它正在总结如何编译 perl 脚本。它说在 NppExec 窗口中放置以下内容:

NPP_SAVE
CD $(CURRENT_DIRECTORY)
C:\MinGW32\bin\gcc.exe -g "$(FILE_NAME)"
a.exe

它只是在最后一行有“a”,但这与“a.exe”相同,并且这种方式更易于人类阅读。话虽如此,这不是一个完整的解决方案。这只是在屏幕底部的 Notepad++ 的内部控制台中运行文件,我希望它弹出一个窗口,就像我使用 Notepad++ 的 F5 从它的目录运行我编译的程序一样。

4

5 回答 5

9

我从这里得到了一个工作代码(我编辑了一点):http:
//windowsbro.blogspot.hu/2012/10/compile-with-notepad-any-language.html

npp_save
g++ "$(FULL_CURRENT_PATH)" -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
npp_run $(CURRENT_DIRECTORY)\$(NAME_PART).exe

在这种形式下,它编译源文件旁边的二进制文件。如果将最后一行更改为:

cmd /c "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"

然后程序在 NppExec 控制台中运行,运行cmd.exe.

于 2015-02-25T14:58:38.087 回答
2

作为Notepad++ 的忠实粉丝和 C++ 新手,我花了一些时间来理解和遵循说明。

There is one part missing here, and if you are like me, starting fresh and having no knowledge of MinGW compiler. You may want to set that one up first.

If the MinGW compiler is not in your environment path (or prefer it not to be: portable versions/policy limitations) then you can follow this.


  1. Install mingw-get-setup.exe

  2. Choose core packages, make sure they all are on the same version otherwise it splashes weird errors, like missing stddef.h files when I compile/run. I picked these ones from MinGW Installation Manager:

MinGW 安装管理器 C++ 组件

  1. Create a script in Notepad++:
npp_save
VCD C:\MinGW\bin\
g++ "$(FULL_CURRENT_PATH)" -o 
"$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
cmd /c "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
  1. Compile and Execute the program within Notepad++: 在 Notepad++ 中执行 C++ 代码

  2. You can add direct execute button or shortcut F5 From nppexec > Advanced Options. Execute button is tiny button at the end of the toolbar: 添加执行按钮和键盘快捷键

或者,如果您想从任何位置运行已编译的程序,您可以将 MinGW 添加到您的环境路径中,可以在他们的网站上找到一个很好的解释 这样您就可以跳过指向 MinGW 目录:

cd C:\MinGW\bin\
于 2017-08-13T10:10:13.883 回答
0

关于您的最后一个问题,如何让 a.exe 在其自己的窗口中而不是在记事本++ 控制台中启动:尝试将最后一行 a.exe 替换为以下内容:

NPP_RUN cmd /k a

npp_run 是 npp_exec 的一个命令,这里它启动命令“cmd /k a”,cmd /k 执行“/k”之后的命令,并在 a.exe 终止后保持窗口打开。

于 2015-01-24T23:29:04.957 回答
0

我给自己写了一个工作代码,询问用户

  1. 输出文件名
  2. 它应该去的目录
  3. 和其他编译器选项,例如 -m32 或其他任何东西

我还处理了空目录和名称,因此不应该出现任何错误。我期待改进这一点,但它现在有效。

//save file
npp_saveall

//specify directory
//if blank set to src dir
inputbox "Specify Directory" : " save_directory" : $(CURRENT_DIRECTORY)
set DIR = $(INPUT)
if "$(INPUT)" == " " then
set DIR = $(CURRENT_DIRECTORY) 
endif
if "$(INPUT)" == "" then
set DIR = $(CURRENT_DIRECTORY) 
endif


//specify file name
//if blank set to a.exe
inputbox "Choose executable name" : " file_name" : a.exe
set NAME = $(INPUT)
if "$(INPUT)" == " " then
set NAME = a.exe
endif
if "$(INPUT)" == "" then
set NAME = a.exe
endif

//add compiling options
inputbox "Additional compiling options" : " add_options" : -m32 -I"C:\SDL2-2.0.12\i686-w64-mingw32 (x32)\include\SDL2" -L"C:\SDL2-2.0.12\i686-w64-mingw32 (x32)\lib"
set OPTIONS = $(INPUT)

//launch g++ compiler
g++.exe "$(FULL_CURRENT_PATH)" -o"$(DIR)\$(NAME)" $(OPTIONS)

//run compiled prgram
if $(EXITCODE) == 0 then
messagebox "Compilation successfull. Saved in '$(DIR)'. Running $(NAME)" : "MinGW g++ Compiler"
npp_run "$(DIR)\$(NAME)"
else
messagebox "Compilation not successfull."

请注意,我在脚本中添加了 SDL 文件。只需删除它们。希望它是有帮助的。

于 2020-10-05T15:44:10.703 回答
0

cd $(CURRENT_DIRECTORY)

"<g++ 目录>\GCC\bin\g++.exe" "$(FILE_NAME)" -o "$(NAME_PART)"

cmd /c "$(NAME_PART).exe"

使用此命令

于 2022-02-01T04:22:47.420 回答