Notepad++中调用cl.exe编译器(Windows)

时间:2022-01-02 10:19:51

Notepad++中调用cl.exe编译器(Windows)#

近来在notepad++中写代码,写完后总是习惯性的想去VS里面编译一下,看看代码是否有误。但有时候一些零碎的小文件总是懒得再VS中打开,VS打开又慢又占资源。回想Emacs、Vim中调用gdb的方式,想着notepad++有没有类似的插件。嗯,结果在Plugin Manager找到了NppExec。

NppExec简介##

安装NppExec后,可以通过菜单中的选项调出NppExec的Manual。User Guide的标题很好的解释了NppExec:

"A Notepad++ Plugin that Allows You to Run Commands and Programs Directly from the Editor."

关于NppExec的各种功能,Manual中有详细的介绍,以下是我主要用到的几个。

Execute...对话框###

在该对话框中,可以以行为单位输入要执行的命令。注意,这里的命令是在NppExec中执行的。

ENV_ SET 和 ENV_ UNSET###

顾名思义,设置环境变量和取消环境变量。

SET 和 UNSET###

通过set设置的变量只能在NppExec内部使用,可以这样理解:只能被NppExec本身使用,不能被NppExec调用的subprocess和external tools使用。比如,我通过NppExec调用了cmd,那么这些变量能在NppExec中调用,但是不能在cmd中使用。这个功能是相对于上一个的,相比较之后想必不难理解。

Try it##

1.既然要编译源码,第一个想到的就是调用cl.exe。如此,便在Execute...对话框中输入以下命令:

D:\vs2013\installations\vc\bin\cl "C:\Users\Gaoxin\Desktop\Modern compiler implementation in C\Chapter 1\util.cpp"

前一个是cl.exe所在目录地址,后一个是源文件的绝对目录地址(目录中包含空格,所以目录用双引号包裹起来)。然而当我执行的时候,却显示:

fatal error C1034: assert.h: no include path set(util.cpp中包含了#include<assert.h>指令)。

2.no include path set !!!什么鬼!!! include path没有设置吗?!以前调用的VS 命令行的时候怎么没有这茬!好吧,搜索之后告诉我可以先调用cl.exe同目录下的vcvars32.bat来正确设置编译链接所需的路径。加上该批文件调用后:

D:\vs2013\installations\vc\bin\vcvars32.bat

D:\vs2013\installations\vc\bin\cl "C:\Users\Gaoxin\Desktop\Modern compiler implementation in C\Chapter 1\util.cpp"

执行显示:

Notepad++中调用cl.exe编译器(Windows)

可以看到,NppExec把两个命令分成两个process来执行。而先设置include path,后调用cl.exe,这两个命令应该在同一个process中执行。很自然的,想到了bat。

3.以下是批处理文件内容,仅两行:

`call D:\vs2013\installations\vc\bin\vcvars32.bat`
`D:\vs2013\installations\vc\bin\cl "C:\Users\Gaoxin\Desktop\Modern compiler implementation in C\Chapter 1\util.cpp"`

执行显示:

Notepad++中调用cl.exe编译器(Windows)

nice!

More convenient##

虽然脚本是写好了,但实在是太难看了,可以用NppExec的环境变量设置功能来改善一下。见图:

Notepad++中调用cl.exe编译器(Windows)

  • ENV_SET--------设置环境变量。
  • cmd /k MyNppExecScript.bat--------在cmd中调用批处理文件。
  • ENV_UNSET--------取消环境变量。

我们可以在批文件中调用设置的环境变量,因为在变量的设置在调用之前,取消在调用之后。批文件中的命令基于这里设置的变量,因此,当工程目录、cl编译器目录、工程下的文件目录、文件名字改变时,我们只需要在该对话框中更改就可以了。

MyNppExecScript.bat见下图:

Notepad++中调用cl.exe编译器(Windows)

  • @echo off--------关闭回显。
  • call "%PROJECT_CL_PATH%\vcvars32.bat"--------调用子脚本,双引号在目录包含空格时为必须。调用另一个批处理程序,并且不终止父批处理程序
  • cls--------清屏
  • cl "%PROJECT_DIR%%FILE_DIR%%FILE_NAME%"--------调用cl.exe编译器编译源文件。

更多功能请参见NppExec Manual。