windows - 在 Windows PowerShell 中运行 VS 2017 构建工具

标签 windows visual-studio powershell batch-file environment-variables

我不喜欢 IDE,所以我安装了 VS 2017 构建工具,这样我就可以通过命令行工作了。

安装很顺利,在 Windows CMD 下一切正常,但是,PowerShell 要好得多,而且我更喜欢使用 PS。这里的问题是根据 MSDN :

The Visual C++ command-line tools use the PATH, TMP, INCLUDE, LIB, and LIBPATH environment variables, and may also use tool-specific environment variables. Because the values of these environment variables are specific to your installation, and can be changed by product updates or upgrades, we recommend that you use vcvarsall.bat or a Developer Command Prompt shortcut instead of setting them yourself. For information about the specific environment variables used by the compiler and linker, see CL Environment Variables and LINK Environment Variables.

我不应该自己设置环境变量,这对我来说很好,唯一的问题是当我在 PS 中运行 vcvarsall.bat 时,环境变量没有改变。我是 PS 的新手,所以我猜 .bat 文件不能改变 session 环境变量。如果是这样的话,那我就没法用PS了。作为旁注,CLLINK 变量永远不会出现,我将在下面解释。

我想我应该找出变量是什么。在运行 batch 文件之前和之后,我将所有变量echo 到一个文本文件中,并编写了一个简短的 Java 程序来查找任何新的或修改的内容。这些是 them .如您所见,CLLINK 变量不存在。

我该如何解决这个问题?我正在考虑编写自己的 batch 文件,但如果第一个不起作用,为什么我的呢?我没有在随附的 MSDN 页面上看到任何内容,也没有看到任何有关如何使 PowerShell 能够正常工作的链接。

最佳答案

编写一个批处理文件,1) 调用 vcvarsall.bat,以及 2) 调用 PowerShell,如下所示(此文件特定于 VS 2015):

@CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %*
@start powershell

%* 允许我们将相同的参数传递给此文件,就像传递给 vcvarsall.bat 一样。

然后 PowerShell 将使用为其准备的环境 block 运行。另一种方法行不通,因为 PowerShell 本身不执行批处理文件——它依赖于 cmd 来执行此操作,并且作为子进程,它有自己的环境 block ,但没有反射(reflection)其 parent 。

关于windows - 在 Windows PowerShell 中运行 VS 2017 构建工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45068442/

相关文章:

powershell - 如果我在服务器或工作站上,如何从Powershell中查找?

git - Powershell/PoshGit - 'Could not find ssh-agent'

windows - 为什么在迭代命令输出时批处理文件 FOR 失败?

javascript - 网站有脚本错误,显示为空白

c# - 在 Resources 文件夹中找不到资源文件

visual-studio - 当我从 Perl 调用 cl.exe 时,为什么不生成任何输出?

c# - PowerShell 脚本上的 Git 命令 - 授权

php - Windows 上的 PHP CLI 选项

本地计算机上的 Java Applet 获得 AccessControlExceptions,这取决于代码路径

windows - 为什么通过 FFI 接口(interface)从 Rust 调用 Ada DLL 时会卡在 adainit?