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

时间:2015-01-16 08:47:23

标签: notepad++ nppexec

我正在阅读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

以下是我为完成工作所做的工作:

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

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

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

如果我在Notepad ++中点击F5(或单击Run菜单中的Run),我可以选择从命令行编译创建的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从其directoy运行我编译的程序。

4 个答案:

答案 0 :(得分:5)

我从这里得到了一个有效的代码(我编辑了一下):
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

答案 1 :(得分:1)

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

这里缺少一部分,如果你像我一样,重新开始并且不了解MinGW编译器。您可能想先设置那个。

如果MinGW编译器不在您的环境路径中(或者不喜欢它:可移植版本/策略限制),那么您可以遵循此。

  1. 安装mingw-get-setup.exe

  2. 选择核心软件包,确保它们都在同一个版本上,否则会产生奇怪的错误,例如在编译/运行时丢失stddef.h个文件。我从MinGW Installation Manager中选择了这些:

  3. MinGW Installation Manager C++ components

    1. 在Notepad ++中创建脚本:
    2. 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

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

        cd C:\MinGW\bin\
        

答案 2 :(得分:0)

关于你的上一个问题如何在自己的窗口中而不是在notepad ++控制台中启动a.exe:尝试用以下内容替换最后一行a.exe:

NPP_RUN cmd /k a

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

答案 3 :(得分:0)

我写了一个要求用户的工作代码

  1. 输出文件名
  2. 应该去的目录
  3. 以及其他编译器选项,例如-m32或其他任何真正的

我还照顾了空目录和名称,因此不应出现任何错误。 我很期待改善这一点,但现在可以使用。

library(dplyr)
var_order = df %>% 
  group_by(class, variable_short) %>%
  summarize(var_mean = mean(variable_importance)) %>%
  ungroup() %>%
  arrange(class, desc(var_mean)) %>%
  pull(variable_short)

df$variable_short = factor(df$variable_short, levels = var_order)
ggplot(df, aes(x = variable_short, y = variable_importance)) + 
  geom_boxplot(aes(colour = class), outlier.colour = NA) + 
  geom_point(position = position_dodge(width = 0.75), aes(group = class))

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