我需要编写一个生成c ++代码,编译并运行它的程序,因此我完成了代码生成部分,并将其写入名为GeneratedCode.cpp的文件中。现在,我写在编译部分,我写道:
system(R"(call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat")");
system(R"(call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat")");
system("cl GeneratedCode.cpp");
首先,这是正确的方法吗?关于这个主题的信息很少,特别是对于VC ++。如果是,那么在使用IDE时我都会遇到问题。
使用IDE时,它会给我:" GeneratedCode.cpp(2):致命错误C1034:iostream:不包含路径设置"。我当然使用iostream标题。
直接运行exe时,它给了我:" ' CL'不被识别为内部或外部命令,可操作程序或批处理文件"。即使我打电话给vcvarsall.bat和vcvars32.bat。
答案 0 :(得分:1)
每次调用system
或_wsystem
都会创建一个新的环境,当呼叫终止时会丢失该环境。如果您的程序需要设置环境变量,如Visual C ++命令提示符LIB
,INCLUDE
等,那么多次调用system
将无法成功。
以下是您的选择,按照我推荐的顺序:
system
。为cl.exe
设置所需的环境块,使其与字符串连接功能一起正常工作,如here所示,并使用该环境调用CreateProcess
。cl.exe
正常工作的所有先决条件命令,在其上调用system
,然后删除批处理文件。&&
连在一起,并使用大量多个命令调用system
一次。