我需要编写一个生成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): fatal error C1034:iostream:未设置包含路径”。我当然在使用 iostream header 。
当直接运行 exe 时,它给我:“'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件”。尽管我调用了 vcvarsall.bat 和 vcvars32.bat。
最佳答案
每次调用 system
或 _wsystem
都会创建一个新环境,当调用终止时该环境会丢失。如果您的程序需要设置环境变量,例如 Visual C++ 命令提示符的 LIB
、INCLUDE
等,那么调用 system 将不会成功
多次。
以下是您的选择,按照我推荐的顺序排列:
- 一起避开
system
。为cl.exe
设置所需的环境 block 以使用字符串连接函数正常工作,如 here 所示。 , 并调用CreateProcess
在那种环境下。 - 让您的程序编写一个批处理文件,其中包含使
cl.exe
正常工作的所有先决条件命令,对其调用system
,然后删除该批处理文件。 - 将命令与
&&
链接在一起,并使用包含多个命令的大字符串调用一次system
。
关于c++ - 使用 VC++ 编译生成的 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781361/