【问题标题】:Can I code and compile all type of Visual Studio Application from Command line?我可以从命令行编码和编译所有类型的 Visual Studio 应用程序吗?
【发布时间】:2011-02-16 12:31:29
【问题描述】:

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

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

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

我已经使用命令行编译了一个简单的 Visual Studio 控制台程序。行得通,但是一套完整的项目呢???

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以使用多个命令行工具:

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

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

    您还可以使用其他构建系统(sconscmake 等),它们要么是独立的 (scons),要么为您的编译器创建本机构建脚本(cmake,在您的情况下会创建 .sln)。

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

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

    看看nehe-tutorial

    【讨论】:

    • 我知道的唯一工具就是 cl.exe。我认为 Msbuild 是适合我的目的的东西。我应该试一试。感谢 OpenGL 的帮助!
    【解决方案2】:

    很多cmets:

    1. 您无需使用-nw; Emacs 在 Windows 上运行良好。

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

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

    4. next-error 函数可以很好地移动指向编译器输出中报告的下一个错误。您可能需要一个用于错误字符串的正则表达式。我用这个:

      (add-to-list '编译错误-正则表达式-alist-alist '(msvc "^[ \t]\([A-Za-z0-9\.][^(]\.\(cpp\|c\|h\)\)(\ ([0-9]+\)) *: +\(错误\|致命错误\|警告\) C[0-9]+:" 1 3)))

    当已经有msvc入口时,可能需要

    (let ((msvcentry (assoc 'msvc compilation-error-regexp-alist-alist )))
      (when msvcentry 
        (setcdr msvcentry '(msvc ....)))))
    
    1. CEDET。我没有在 Windows 上使用 CEDET 和 C++ 的任何经验,但是很多人在其他环境中使用 CEDET 和 C++,用于代码完成、代码分析等。

    【讨论】:

    • 是的,Emacs 的 Win32 GUI 版本运行良好,但我更喜欢(当然这是主观问题)emacs -nw,因为恕我直言,它很轻。我的第一次编码是在 Dos Prompt 的 GW Basic 中——准确地说,是在 ROM 中——所以很高兴知道在我的专业工作年龄,我可以在 DOS Prompt 中再做一次,而不是在花哨的图形用户界面。我会尝试两个答案,这对我来说似乎太多了。谢谢
    • 哦,是的,我是 cmd.exe(“新 DOS”)和控制台应用程序的忠实粉丝。我还没有采用 powershell 作为我的通用 shell,但我确实每天都在使用它。如果你不知道,我建议你调查一下。但我还是喜欢 emacs 在窗口中的图形外观。你是对的——这是非常主观的。各有各的。
    【解决方案3】:

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

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

    接受这个建议,我创建了一个 Emacs lisp 文件来在 Emacs for Visual Studio 2010 中设置我的环境。要创建这个文件,我首先从普通命令提示符捕获环境设置,然后从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多