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

Posted

技术标签:

【中文标题】我可以从命令行编码和编译所有类型的 Visual Studio 应用程序吗?【英文标题】:Can I code and compile all type of Visual Studio Application from Command line? 【发布时间】: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 控制台程序。行得通,但是一套完整的项目呢???

谢谢!

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

看看nehe-tutorial。

【讨论】:

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

很多cmets:

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

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

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

    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 ....)))))
    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

【讨论】:

以上是关于我可以从命令行编码和编译所有类型的 Visual Studio 应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行编译 Visual Studio 项目?

通过命令行编译C / C ++ / Visual C程序

Eigen 程序无法从 Visual Studio 编译,但从命令行编译成功

Visual Studio 2019:使用 vcvars64.bat 从命令行构建 C++ 不再起作用

如何在命令行中使用 Visual Studio 编译 x64 代码?

通过命令行在 Visual Studio 中编译单个独立文件