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"

执行显示:



可以看到,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"`

执行显示:



nice!

More convenient##

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

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

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

MyNppExecScript.bat见下图:

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

更多功能请参见NppExec Manual。

Notepad++中调用cl.exe编译器(Windows)的更多相关文章

  1. microsoft cl.exe 编译器

    cl.exe是visual stdio 内置的编译器,visual stdio包含各种功能,有些功能可能这辈子都用不到,体积庞大,如果是 开发比较大或者有图形的项目,vs是首选.更多情况时更喜欢使用文 ...

  2. C++程序中调用其他exe可执行文件方法

    在编程过程中有个需求,点击某个按钮需要弹出系统的声音控制面板.在网上查了下代码中调用其他exe程序或者打开其他文件的方法. 自己借鉴网上的文章稍微总结下,加深下印象,也给方便自己用. 在代码中调用其他 ...

  3. 通过命令行使用cl.exe编译器

    转载http://www.cnblogs.com/mizhongqin/archive/2013/03/11/cmd_cl-exe_vs2010.html 与在IDE中编译相比,命令行模式编译速度更快 ...

  4. [转]VC中调用外部exe程序方式

    本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProce ...

  5. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”

    首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用. 通常,在模块的头文件中对本模块提供给其它模块 ...

  6. html中调用本地exe应用程序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. vs中出现CL.exe已退出的情况总结

    1.函数具有返回值 在定义时没有加上返回值 2.使用未初始化的内存 比如 #include<stdio.h> int main() { int a; printf("%d&quo ...

  8. 调用Visual Studio的cl.exe编译C/C++程序

    @ 目录 调用Visual Studio的cl.exe编译C/C++程序 前言 1.查看VS的路径 2.添加环境变量 3.查看设置是否生效 4.配置Notepad++ 调用Visual Studio的 ...

  9. vc中nmake.exe cl.exe 的使用

    首先简单介绍一下程序是如何编译链接的.程序写好之后,我们进行编译和链接来产生可执行程序.这时候,编译器为了完成编译和链接,需要知道很多信 息.比如要编译的文件是哪一个,使用哪些编译选项进行编译,编译好 ...

随机推荐

  1. Angular与React的一些看法

    Angular - React之争 Angular和React无疑是目前最受追捧的两个前端框架,谷歌也发现Angular1.x不足的地方,开始开发2.0版本,脸书发现React的组件化和虚拟DOM非常 ...

  2. uva 10369

    数组开小了  还RE了一遍.......  最小生成树    按费用从小到大排... #include <iostream> #include <algorithm> #inc ...

  3. [Akka]发送一条消息的内部流程

    本想通过了解一下Akka-actor工程中主要的类的概念,来看下Akka内部运作的机制.无奈里边的类的确太多,注释中对每个类的功能也没有足够的解释.所以还是通过debug的方式,找个入手点,看一下互相 ...

  4. 定长内存池之BOOST::pool

    内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1.      ...

  5. JavaScript 三种创建对象的方法

    JavaScript中对象的创建有以下几种方式: (1)使用内置对象 (2)使用JSON符号 (3)自定义对象构造 一.使用内置对象 JavaScript可用的内置对象可分为两种: 1,JavaScr ...

  6. iOS开发--使用RSA加密

    在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...

  7. 218. The Skyline Problem

    题目: A city's skyline is the outer contour of the silhouette formed by all the buildings in that city ...

  8. P154、面试题28:字符串的排列

    题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab.cba. 测试用例: 1)功能测试( ...

  9. Vim的tag系统

    tag标识符存储在ctags等程序生成的文件里 :tag和<C-]>命令跳转到光标所在符号(若光标不再符号上则为右边第一个符号)的定义处 还有g+鼠标左键和<C-鼠标左键> & ...

  10. 使用net start mysql的时候出现服务名无效的原因及解决办法

    原因:mysql服务没有安装 解决办法:使用管理员权限,执行mysqld -install命令 然后以管理员身份net start mysql开启mysql服务 卸载mysql服务的方法 1.管理员权 ...