Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从程序内启动cl.exe仅在某些情况下有效_C++_Windows_Qt_System Calls_Cl - Fatal编程技术网

C++ 从程序内启动cl.exe仅在某些情况下有效

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成功启动 在资源管理器中单

因此,我有一个Qt程序(“Main”),它(在它的Windows版本中)在内部启动cl(VS编译器)。我可以用三种方法中的一种启动Main,其中两种方法,对cl的内部调用成功,第三种,可能是最重要的一种,它失败,出现“cl是无法识别的程序…”错误。cl是用
system
调用的,在调用它之前,我跟随并运行
vcvvars32.bat
,也使用
system

  • Main是从QtCreator内部启动的。在这种情况下,cl成功启动
  • Main从Windows命令行启动。在这种情况下,cl成功启动
  • 在资源管理器中单击Main可启动它。在这种情况下,cl无法启动,控制台中再次短暂闪烁“unrecognized program”(无法识别程序)错误
  • 我想有些环境要么是从QtCreator(1)继承的,要么是在Windows命令行启动(2)时设置的,而不是在单击图标时设置的。不过只是猜测而已。有人知道在(3)的情况下,我能做些什么使事情顺利进行吗?使用另一个编译器会增加不同的复杂性,所以我只想使用
    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按照进行连接不起作用。我想我会考虑创建一个实际的批处理文件。