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. Jplayer(转)

    Jplayer必须要加载 1.样式  jplayer.blue.monday.css 2.jq jquery.1.6.2.min.js 当前最新版本为1.6.2 3.jplayer的js jquery ...

  2. [转]SqlServer数据库同步方案详解

    SqlServer数据库同步是项目中常用到的环节,若一个项目中的数据同时存在于不同的数据库服务器中,而这些数据库需要被多个不同的网域调用时,配置 SqlServer数据库同步是个比较好的解决方案.Sq ...

  3. 1058: [ZJOI2007]报表统计 - BZOJ

    Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个非 ...

  4. [scalability] Find all documents that contain a list of words

    Given a list of millions of documents, how would you find all documents that contain a list of words ...

  5. Hibernate-Validation的使用

    首先是要加入下面两个包 hibernate-validator-4.1.0.Final.jar validation-api-1.0.0.GA.jar 如果在验证不通过的时候进行了添加.更新或删除操作 ...

  6. MCM试题原文及翻译 AB题 2014美国数学建模竞赛

    MCM试题原文及翻译 AB题 2014美国数学建模竞赛 原创翻译,如有瑕疵,敬请谅解. 转载请注明:过客小站 » MCM试题原文及翻译 AB题 2014美国数学建模竞赛 PROBLEM A: The  ...

  7. sql批量删除wordpress所有日志修订revision

    wordpress日志修订是所有速度慢的罪恶之源,每次在后台发布或修改文章的时候,数据库都会产生一个revision版本的记录,几百篇日志会有几千条日志修订的记录,如果更多文章的话,那一个网页打开可能 ...

  8. POJ3207+tarjan+2-sat

    /* 2-sat 题意:给定一个圆,圆上一些点.两点一线.现给出一些线,这些线可以在圆内连起来,也可以在圆外. 问有没有可能所有的线画完 且 不出现相交. 思路:把线画在圆内或圆外 看成一个组合.其它 ...

  9. loadrunner java协议脚本要点

    常见问题 1. Error: Thread Context: Call to service of the driver failed, reason - thread context wasn't ...

  10. linux中class_create和class_register说明

    http://blog.csdn.net/angle_birds/article/details/16802099 本文介绍linux中class_create和class_register的相关使用 ...