如何在Notepad++中编译/执行C++代码

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 Installation Manager。我使用它来安装了mingw32-gcc-++包以及mingw32-libz.dll和mingw32-libz.dev包。
在Notepad++中,我使用插件管理器安装了NppExec插件。
我可以先手动在命令窗口中编译我的代码,然后运行它。Notepad++会抱怨缺少一个库,所以我在编译时使用以下标志:g++ test.cpp -static-libgcc -static-libstdc++。
如果我在Notepad++中按下F5(或在“运行”菜单中单击“运行”),我可以选择从我的命令行编译中创建的a.exe文件,并弹出一个命令窗口并运行该代码,这很好用。
但是当我尝试自动化编译/运行时,似乎我的更改目录命令不起作用。
以下是我找到的一些类似问题的其他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运行编译的程序时一样。


似乎您想要更新问题,涉及到缺失库的问题,或者查看链接问题的答案 - C、C++、Perl它们在NP++构建和执行方面都是相同的。 - gbjbaanb
我没有缺失的库。我在链接的帖子中看到了一个答案,描述了如何在记事本的控制台屏幕上运行C++程序,在Notepad++窗口的底部,但我使用的是宽屏笔记本电脑(意味着短屏幕),我没有足够的空间来同时显示两个窗口,一个垂直于另一个,并在两个窗口中显示几行。我希望它弹出一个控制台窗口,就像如果我直接使用Notepad++的运行命令(默认为F5)运行编译后的可执行文件一样。 - KJ6BWB
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运行。


直到我将最后一行替换为非常相似但不同的内容:**cmd /c ""$(CURRENT_DIRECTORY)$(NAME_PART).exe""**,它与你的唯一区别在于两侧有2个双引号,这才对我起作用。 - Santropedro

2
作为一个热爱Notepad++且刚入门C++的粉丝,我花了一些时间才理解并遵循指示。
这里缺少一部分内容,如果你和我一样是个新手,对MinGW编译器毫无了解,你可能需要先设置它。 如果MinGW编译器不在你的环境变量中(或者你不想将其添加进去:便携版本/策略限制),那么你可以按照以下步骤进行设置。
安装mingw-get-setup.exe。 选择核心包,确保它们都是同一个版本,否则会出现奇怪的错误,比如在编译/运行时缺少stddef.h文件。我从MinGW安装管理器中选择了以下包:

MinGW Installation Manager C++ components

在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. 在Notepad++中编译和执行程序: Execute C++ code in Notepad++

  2. 你可以添加直接执行按钮或快捷键F5从nppexec>高级选项。执行按钮是工具栏末尾的小按钮: Adding Execute button and keyboard shortcut

另外,如果你想从任何位置运行编译后的程序,可以将MinGW添加到环境路径中,可以在他们的网站上找到一个很好的解释。 这样你就可以跳过指定MinGW目录的步骤:

cd C:\MinGW\bin\

0
关于您最后一个问题如何在其自己的窗口中启动a.exe而不是在notepad++控制台中启动:尝试将最后一行a.exe替换为类似以下内容的内容:
NPP_RUN cmd /k a

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


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文件。只需将它们删除即可。 希望这对您有所帮助。

0

cd $(CURRENT_DIRECTORY)

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

cmd /c "$(NAME_PART).exe"

使用此命令


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接