我可以从命令行编码和编译所有类型的 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.exe
和link.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 应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章
Eigen 程序无法从 Visual Studio 编译,但从命令行编译成功
Visual Studio 2019:使用 vcvars64.bat 从命令行构建 C++ 不再起作用