尝试使用 cl Visual Studio 命令通过 C++ 程序中的 system() 函数进行命令行构建时出现 vcvars32.bat 问题

Issue with vcvars32.bat when trying to use cl Visual Studio command for command line build via the system() function in a c++ program

我正在尝试从另一个 c++ 程序中编译生成的 cpp 文件。

开始(查看 cl 命令是否有效)我正在尝试使用 Visual Studio 从 c++ 程序构建的命令行,如下所示:

command("cl");

由于 c++ 命令提示符不是本机工具命令提示符,我首先调用:

command("C:"/Program Files (x86)/Microsoft Visual \ Studio/2019/Community/VC/Auxiliary/Build/vcvars32.bat"");

这似乎执行得很好,具有预期的输出。但是,当我在收到以下消息后进行 cl 调用时:

'cl' is not recognized as an internal or external command.

这与我没有调用 vcvars32.bat.

时的预期错误相同

如果我从常规命令提示符执行完全相同的过程,一切正常,但不是来自我的 Visual Studio 2019 C++ 17 项目的 c++ 程序 cmd。

我对它不起作用并不感到惊讶,我假设 C++ 项目的环境有一些不同,尽管 vcvars32.bat 调用成功但不会设置环境变量以要求的方式。

有谁知道这可能取决于什么以及(如果可能)如何解决它?或者如果您对如何从另一个 c++ 程序编译一个 c++ 项目有任何其他想法?

在我看来,cl 不在你的道路上。您需要添加 it. The recommended way to do this is to launch a developer command prompt. You could refer to this link 关于如何设置 CL 环境变量。

此外,您还需要设置工具集。如果你有一个普通的命令提示符 window 打开,你可以 运行 带有适当参数的批处理文件 vcvarsall.bat 来设置环境变量。

  1. 在命令提示符下,改成Visual C++安装 目录。 (位置取决于系统和 Visual Studio 安装,但典型位置是 C:\Program Files (x86)\Microsoft Visual Studio version\VC.) 例如输入:

    cd "\Program Files (x86)\Microsoft Visual Studio 12.0\VC"

  2. 要为 32 位 x86 命令行构建配置此命令提示符 window,请在命令提示符处输入:

    vcvarsall x86

可能的参数如下:

x86 (x86 32-bit native)
x86_amd64 (x64 on x86 cross)
x86_arm (ARM on x86 cross)
amd64 (x64 64-bit native)
amd64_x86 (x86 on x64 cross)
amd64_arm (ARM on x64 cross)

如果运行vcvar32时出现ERROR: Cannot determine the location of the VS Common Tools Folder,可以查看环境变量PATH中是否有c:\windows\system32。如果没有,您可以添加它。因为vcvar32会在运行ning的时候调用一个叫reg的命令。而这个 reg 命令需要 c:\windows\system32.

我解决了问题,正如 S.M 指出的那样,system() 在每次调用之间打开一个新的 shell。 我在 Paul Sanders 提出的同一系统调用中使用运算符 & 和 运行 vcvars32.bat 和 cl 命令解决了这个问题。