我可以从命令行编码和编译所有类型的Visual Studio应用程序吗?

时间:2011-02-16 12:31:30

标签: c++ visual-studio visual-studio-2008 emacs

我正处于使用Emacs作为编程环境的第一步。我使用emacs -nw在DOS提示符下运行它并在那里进行开发。令人难以置信的是,我可以使用Emacs及其Eshell / Shell对J2EE和J2ME进行编码。

现在关于将它用于Visual Studio开发。 目前,我正在使用Visual C ++ .NET 2008在一个简单的OpenGL应用程序中工作。 我没有尝试从命令行构建该应用程序,是否可能?

如果在J2EE和J2ME中,我们有build.xml(这是一个ant构建文件),但Visual Studio.NET解决方案中的类似物是什么?

我已经使用命令行编译了一个简单的Visual Studio Console程序。它有效,但是一套完整的项目呢?

谢谢!

3 个答案:

答案 0 :(得分:5)

您的服务中有几个命令行工具:

  • msbuild.sln文件构建项目(类似于ant的build.xml文件)
  • nmake这是一个基于Makefile文件的旧版构建系统
  • cl.exelink.exe

您需要做的就是启动visual-studio-commandline提示符或将该提示符的环境包含在您自己的shell / powershell / emacs环境中。查看vcvars32.bat文件及其功能,它位于visual2008的安装文件夹中的某个位置。

您还可以使用其他构建系统(sconscmake等),这些系统可以是独立的(scons),也可以为您的编译器创建本机构建脚本(cmake,会在您的库中创建.sln情况)。

编译(和链接)一个使用opengl的简单二进制文件,你可以这样做:

 % cl /nologo opengl.cpp /link OpenGL32.lib GLu32.lib and GLaux.lib

看看nehe-tutorial

答案 1 :(得分:2)

很多评论:

  1. 您无需使用-nw; Emacs适用于Windows。

  2. build.xml的模拟是xxxxxx.sln,与依赖项目文件(zzzzzzz.csproj)相结合。当然,用您的解决方案和项目名称替换xxxx和zzzzz。

  3. 您不需要eshell或shell进行编译。您可以使用M-x compile从emacs中运行编译,C-xC-e通常绑定到组合键以便于访问。我的是next-error,但我不知道这是一个广泛的惯例,还是我的选择。

  4. (let ((msvcentry (assoc 'msvc compilation-error-regexp-alist-alist ))) (when msvcentry (setcdr msvcentry '(msvc ....))))) 函数可以正常移动指向编译器输出中报告的下一个错误。您可能需要一个正则表达式的错误字符串。我用这个:

    (add-to-list'compilation-error-regexp-alist-alist    '(msvc“^ [\ t] \([A-Za-z0-9 \。] [^(] \。\(cpp \ | c \ | h \)\)(\ ([0-9] + \))*:+ \(错误\ |致命错误\ |警告\)C [0-9] +:“1 3)))

  5. 如果已有msvc条目,则可能需要

    {{1}}
    1. CEDET。我没有在Windows上使用CEDET和C ++的经验,但很多人在其他环境中使用CEDET和C ++,代码完成,代码分析等等。

答案 2 :(得分:2)

在这个问题的另一个答案中,@akira said

  

您所要做的就是启动visual-studio-commandline提示符    OR 将该提示的环境合并到您自己的shell / powershell / emacs环境中。看看吧    vcvars32.bat 文件及其功能;它位于visual2008的安装文件夹中的某个位置。

考虑到这个建议,我创建了一个Emacs lisp文件,用于在Visual Studio 2010的Emacs中设置我的环境。要创建此文件,我首先从普通命令提示符捕获环境设置,然后从Visual中执行相同的操作。 Studio命令提示符:

set > set_ordinary.txt
set > set_vs2010.txt

然后,我使用file differencing tool for Windows找到了两者之间的差异。以下emacs lisp代码是我努力的结果。只需将其内容复制到 .emacs 文件中,或者更好,将其内容保存到 vcvars32-2010.el 并将其放在load-path

;;; vcvars32-2010.el --- Create Visual Studio Command Prompt (2010) environment settings

;; Environment settings for:
;;   Visual Studio 2010 Professional
;;   Version 10.0.40219.1 SP1Rel
;;
;;   Microsoft .NET Framework
;;   Version 4.5.50938 SP1Rel

;; Reference:
;;   C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat
;;    -and-
;;   C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\bin\\vcvars32.bat

;;; Usage:

;; Place this file somewhere in your `load-path' and add the following line
;; to your `.emacs' file:
;;
;;    (load "vcvars32-2010.el")

;;; Code:

(setenv "CommonProgramFiles" "C:\\Program Files\\Common Files")
(setenv "DevEnvDir" "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\")

(setenv "Framework35Version" "v3.5")
(setenv "FrameworkDir" "C:\\Windows\\Microsoft.NET\\Framework\\")
(setenv "FrameworkDIR32" "C:\\Windows\\Microsoft.NET\\Framework\\")
(setenv "FrameworkVersion" "v4.0.30319")
(setenv "FrameworkVersion32" "v4.0.30319")

(setenv "INCLUDE"
        (concat
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\INCLUDE;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\ATLMFC\\INCLUDE;"
         "C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\include;"))

(setenv "LIB"
        (concat
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\LIB;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\ATLMFC\\LIB;"
         "C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\lib;"))

(setenv "LIBPATH"
        (concat
         "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319;"
         "C:\\Windows\\Microsoft.NET\\Framework\\v3.5;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\LIB;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\ATLMFC\\LIB;"))

(setenv "Path"
        (concat
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VSTSDB\\Deploy;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\BIN;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\Tools;"
         "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319;"
         "C:\\Windows\\Microsoft.NET\\Framework\\v3.5;"
         "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\VCPackages;"
         "C:\\Program Files (x86)\\HTML Help Workshop;"
         "C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\bin\\NETFX 4.0 Tools;"
         "C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\bin;"
         (getenv "Path")))

(setenv "PROCESSOR_ARCHITECTURE" "AMD64")
(setenv "ProgramFiles" "C:\\Program Files")

(setenv "VCINSTALLDIR"
        "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\")

(setenv "VSINSTALLDIR"
        "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\")

(setenv "WindowsSdkDir"
        "C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\")

;;; vcvars32-2010.el ends here