【发布时间】:2017-12-17 12:24:22
【问题描述】:
我不喜欢 IDE,所以我安装了 VS 2017 构建工具,这样我就可以通过命令行工作了。
安装很顺利,一切都可以在 Windows CMD 下运行,但是,PowerShell 要好得多,我更喜欢使用 PS。这里的问题是,根据MSDN:
Visual C++ 命令行工具使用 PATH、TMP、INCLUDE、LIB 和 LIBPATH 环境变量,也可能使用工具特定的环境变量。由于这些环境变量的值特定于您的安装,并且可以通过产品更新或升级进行更改,因此我们建议您使用 vcvarsall.bat 或开发人员命令提示符快捷方式,而不是自己设置它们。有关编译器和链接器使用的特定环境变量的信息,请参阅 CL 环境变量和 LINK 环境变量。
我不应该自己设置环境变量,这对我来说很好,唯一的问题是当我在 PS 中运行vcvarsall.bat 时,环境变量没有改变。我是 PS 新手,所以我猜 .bat 文件不能更改会话环境变量。如果是这样的话,那我就没法PS了。附带说明一下,CL 和 LINK 变量永远不会出现,我将在下面解释。
我想我应该找出变量是什么。在运行batch 文件之前和之后,我将所有变量echoed 到一个文本文件中,并编写了一个简短的Java 程序来查找任何新的或修改的内容。这些是them。如您所见,CL 和 LINK 变量不存在。
我该如何解决这个问题?我正在考虑编写我自己的batch 文件,但如果第一个文件不起作用,我的文件为什么会这样呢?我在附加的 MSDN 页面上没有看到任何内容,也没有看到任何关于如何使其适用于 PowerShell 的链接。
【问题讨论】:
-
您链接的 MSDN 页面上对
CL Environment Variables和LINK Environment Variables的引用是链接。您是否关注他们以查看他们添加的内容? -
编写一个批处理文件,1) 调用
vcvarsall.bat,2) 调用 PowerShell。然后,PowerShell 将使用为其准备的环境块运行。反过来也行不通,因为 PowerShell 本身不执行批处理文件——它依赖cmd来执行此操作,并且作为子进程,它有自己的环境块,不会反映在其父进程上。 -
@KenWhite 都应该添加同名变量:
CL和_CL_和LINK和_Link_。这些都没有出现,这就是我的意思。 -
您应该使用当前版本的docs,您可能会注意到 CL 工具使用 CL 环境变量 if defined 将内容添加到命令中,因此,如果没有定义任何内容,它就不会在命令之前添加内容。
-
@JeroenMostert 我写了批处理文件:hastebin.com/omeparoruc.bat,但它似乎不起作用。如果我双击它,CMD 会弹出一秒钟,说环境已初始化,然后消失,没有任何反应。此外,如果我在 CMD 会话中运行批处理文件,它与双击它的效果相同,甚至不会在 CMD 中打开 PS。
标签: windows visual-studio powershell batch-file environment-variables