尝试使用 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
来设置环境变量。
在命令提示符下,改成Visual C++安装
目录。 (位置取决于系统和 Visual Studio
安装,但典型位置是 C:\Program Files
(x86)\Microsoft Visual Studio version\VC.) 例如输入:
cd "\Program Files (x86)\Microsoft Visual Studio 12.0\VC"
要为 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 命令解决了这个问题。
我正在尝试从另一个 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
来设置环境变量。
在命令提示符下,改成Visual C++安装 目录。 (位置取决于系统和 Visual Studio 安装,但典型位置是 C:\Program Files (x86)\Microsoft Visual Studio version\VC.) 例如输入:
cd "\Program Files (x86)\Microsoft Visual Studio 12.0\VC"
要为 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 命令解决了这个问题。