C++ 从程序内启动cl.exe仅在某些情况下有效
因此,我有一个Qt程序(“Main”),它(在它的Windows版本中)在内部启动cl(VS编译器)。我可以用三种方法中的一种启动Main,其中两种方法,对cl的内部调用成功,第三种,可能是最重要的一种,它失败,出现“cl是无法识别的程序…”错误。cl是用C++ 从程序内启动cl.exe仅在某些情况下有效,c++,windows,qt,system-calls,cl,C++,Windows,Qt,System Calls,Cl,因此,我有一个Qt程序(“Main”),它(在它的Windows版本中)在内部启动cl(VS编译器)。我可以用三种方法中的一种启动Main,其中两种方法,对cl的内部调用成功,第三种,可能是最重要的一种,它失败,出现“cl是无法识别的程序…”错误。cl是用system调用的,在调用它之前,我跟随并运行vcvvars32.bat,也使用system Main是从QtCreator内部启动的。在这种情况下,cl成功启动 Main从Windows命令行启动。在这种情况下,cl成功启动 在资源管理器中单
system
调用的,在调用它之前,我跟随并运行vcvvars32.bat
,也使用system
cl
(避免对这一问题的一个明显的回答)。另外,我试着使用QProcess
来做这件事,但我在所有1-3中都遇到了同样的问题
编辑:这是对vcvars32.bat的调用
int setup_code = system(setup.c_str());
//Where setup is "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"
这将在所有1-3中返回0(成功)。然后调用cl,例如
int code = system(cmd.c_str());
//Where cmd is "cl /O2 "test.cpp" /Fe"test.exe""
对于1-2和条件3中的1,这将返回0,即ERROR_INVALID_函数。这都非常模糊:-/…@πάνταῥεῖ 好的,我将添加确切的系统调用,也许这会使它更具体一些。否则,就跟我写的一样简单,
cl
在两种情况下启动,但在第三种情况下不会启动。您是否尝试过一个批处理文件来设置环境并在一个步骤中运行所需的命令。在系统中运行VCVAR是可以的,但一旦调用返回您设置的所有环境,它就消失了,就像一个超出范围的变量一样。@RetiredInja好的,我会试试这个--至少是快速而肮脏的版本,它们只是在系统中连接起来。听起来很有希望。我想我只是假设只有一个“虚拟命令行”或其他东西在维护环境。@RetiredInja按照进行连接不起作用。我想我会考虑创建一个实际的批处理文件。