【问题标题】:How to run “:compiler msvc” and “:comp msbuild” with Vim on Windows?如何在 Windows 上用 Vim 运行“:compiler msvc”和“:comp msbuild”?
【发布时间】:2013-09-11 12:36:00
【问题描述】:

我有 VS Express (2012) 桌面版。我是否也获得了 NMAKE.EXE 程序?

http://msdn.microsoft.com/en-us/library/dd9y37ha.aspx - 微软 程序维护实用程序 (NMAKE.EXE) 是构建项目的工具 基于描述文件中包含的命令。

当我在运行:compiler msvc 后运行:make 时,shell 返回消息“'nmake' 无法识别为内部或外部命令,”。如何使用这些命令编译 C++ 程序? NMAKE.EXE 工具是否与 'nmake' 命令有关系?


http://msdn.microsoft.com/en-us/library/wea2sca5(v=vs.90).aspx - MSBuild 是 Microsoft 和 Visual Studio 的新构建平台。

http://msdn.microsoft.com/en-us/library/dd293626.aspx - 你可以使用 MSBuild 工具从 命令提示符。构建过程由中的信息控制 您可以创建和编辑的项目文件 (.vcxproj)。该项目 文件根据构建阶段、条件和 事件。

我是否也因为我的 VS Express for Desktop 而获得了 MSBuild 工具?当我在运行:compiler msbuild 后使用:make 时,shell 返回消息“'msbuild' 不是内部或外部命令,”。 msbuild.vim 和 MSBuild 工具有关系吗?

msbuild.vim的维护者说,“我制作了用于编译的脚本 使用 .NET 的 C# 项目...我不知道它是否适用于 C++...”

如何在 Vim 中通过在 :make 之前运行 :compiler msbuild 进行编译?


关于编译C++源文件等程序只有两个问题,关于这个问题,请详细说明:

  1. 如何使用:compiler msvc?
  2. 如何使用:compiler msbuild?

【问题讨论】:

  • 尝试从“Visual Studio (2012) 命令提示符”运行 (g)VIM(应该在您的开始菜单/屏幕中可用)
  • vim.wikia.com/wiki/… 的另一条信息可能有助于解决这个问题说 “如果你使用 nmake,你可以使用 compiler msvc 来设置 Vim 的 errorformat 和 makeprg for Visual C++ .将compiler cs 用于 C#。”

标签: c++ windows visual-studio visual-c++ vim


【解决方案1】:

快速搜索发现:Getting started - C/C++ programming with VIM,这可能是一个很好的起点。

正如 user786653 提到的,这是失败的,因为您的 PATH 不包含 nmake.exe 所在的目录。您可以检查您的路径

:echo $PATH 

Vim 不会替换底层的构建功能,它只是简单地包装它。

  1. 从 Visual Studio 命令提示符启动 gVim
  2. 在测试目录中创建新文件:

    test.cpp

    #include <iostream>
    int main() { 
        printf("hello world.");
        return 0;
    }
    

    生成文件

    all:
        cl test.cpp 
    
  3. 设置编译器(gVim)

    :compiler msvc
    
  4. 编译 (gVim)

    :make
    

我没有 msbuild.vim 脚本,但是通过将“make program”设置为 msbuild.exe

:set makeprg=msbuild

您可以通过从包含解决方案 (.sln) 或项目 (.vxcproj) 文件的目录运行 :make 来构建,或者您可以像这样使用msbuild.exe command line:

:make c:\Test\Test.sln  /t:Rebuild /p:Configuration=Debug

编译后,您可以使用

检查输出
:copen 

并使用(n 表示下一个,p 表示上一个,r 表示倒回第一个错误)导航错误

:cn 
:cp 
:cr 

【讨论】:

  • 我已经尝试从 VS2012 的开发人员命令提示符中运行 (g)Vim。我认为正确的说明会让它发挥作用。
  • 外壳返回 “MSBUILD : 错误 MSB1003: 指定项目或解决方案文件。当前工作目录不包含项目或解决方案文件。” 当使用:compiler msbuild 时。您对:compiler msvc 的回答有效,但没有得到很好的指导,特别是对于初学者。它甚至没有任何宏。最重要的是,我花了几天时间阅读NMAKE Reference 下的所有内容。然而,我认为这个答案应该得到一半的赏金。
  • 啊,这很好,我没有提到当前目录需要包含解决方案 (.sln) 或项目 (.vxcproj) 文件,就像它对 makefile 所做的那样。我将对其进行编辑以使其更清晰。
  • 您的回答没有关于 Makefile 的指导。它上面的命令甚至不包括命令行选项。而且没有宏。没有指南,甚至没有项目或解决方案文件的样本。然而,你知道你在做什么,它给出了完整的想法..
  • 使用 makefile 和编译代码通常看起来像是一个单独的层来理解,而 vim 是一个薄层。这是我找到的参考资料,可能会有所帮助。 stackoverflow.com/questions/2481269/…
【解决方案2】:

当我在运行 :compiler msbuild 后使用 :make 时,shell 返回 消息“'msbuild' 未被识别为内部或外部 命令,”。 msbuild.vim 和 MSBuild 工具有关系吗?

是的。

要在命令提示符中启用 msbuild,您只需将计算机上安装的 .net4 框架的路径添加到 PATH 环境变量中。 以下在 Windows 上对我有用:

您可以通过右键单击“计算机”,单击“属性”,然后单击左侧导航栏上的“高级系统设置”来访问环境变量。在下一个对话框中单击“环境变量”,向下滚动到“PATH”并对其进行编辑以包含您的框架路径(不要忘记此处最后一个条目后的“;”。

作为参考,我的路径是C:\Windows\Microsoft.NET\Framework64\v4.0.30319。 [1]

虽然我只将它用于 C# 项目,但我想它也适用于 C++。 请记住,您必须在项目目录中运行msbuild,否则 msbuild 将无法找到您的项目。

为了完整起见,这里是我的 vimrc 的 sn-p(OP 已经通过电子邮件获得)。

noremap <F4> :<C-U>silent make<CR>:redraw!<CR>
au FileType cs compiler msbuild

当然,我们总是欢迎对这个编译器脚本进行补丁和添加!

问候

[1]:How do I run msbuild from the command line using Windows SDK 7.1?

【讨论】:

  • 我花了一段时间才注意到这个答案来自 msbuild.vim (Microsoft Visual Studio C#) 脚本的维护者。
  • 我通常在 Linux 上使用 xbuild(相当于 msbuild 的单声道)。为了回答这个问题,我在 Windows 上安装了 vim 并使用上述方法将 msbuild 添加到我的路径中。打开源文件并运行:comp msbuild 和:make 立即使项目编译。
  • 我还不知道。在这段时间里,我不关注这个话题。但我认为设置路径后,需要指定项目(.vcxproj)或解决方案(.sln)文件才能编译程序。如果这不起作用,那么我认为还需要一个 makefile。实际上我还没有能力理解你的 sn-p 的第一行(但我可以查看它)。
  • @Chiel 10 Brinke:如果我运行:compiler msbuild,会出现以下错误:Error detected while processing ...vim81\compiler\msbuild.vim: line 18: E518: Unknown option: /nologo\ /v:q\ /property:GenerateFullPaths=true 你能告诉我如何解决吗?错误也出现在neovim :(
  • @Mattia72:是because you have an extra space。 msbuild.vim included with vim 没有额外的空间,所以也许你的被修改了。安装新版本的 vim 来修复它。
猜你喜欢
  • 2012-10-10
  • 2011-01-26
  • 2013-04-12
  • 2019-04-21
  • 2011-09-13
  • 2015-12-20
  • 2021-07-20
  • 1970-01-01
  • 2020-09-13
相关资源
最近更新 更多