c++ - 使用 VC++ 编译生成的 C++ 代码

标签 c++ compiler-errors code-generation

我需要编写一个生成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++ 命令提示符的 LIBINCLUDE 等,那么调用 system 将不会成功 多次。

以下是您的选择,按照我推荐的顺序排列:

  1. 一起避开system。为 cl.exe 设置所需的环境 block 以使用字符串连接函数正常工作,如 here 所示。 , 并调用 CreateProcess在那种环境下。
  2. 让您的程序编写一个批处理文件,其中包含使 cl.exe 正常工作的所有先决条件命令,对其调用 system,然后删除该批处理文件。
  3. 将命令与 && 链接在一起,并使用包含多个命令的大字符串调用一次 system

关于c++ - 使用 VC++ 编译生成的 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781361/

相关文章:

c# - 在我们的.net项目中更改MSBuild工具集(ToolsVersion)有什么缺点?

c++ - 纯抽象类可以包含静态常量、静态方法或非虚拟析构函数吗?

c++ - 在类构造函数中初始化类成员数组?

c# - 使用DirectShow的过时COMType的编译器错误

java - 第21行显示;预期

java - 需要在运行时用动态生成和编译的java .class文件替换运行时现有的类

java - 如何使用 for 语句获取数组或数组列表中的所有 n 组三个连续元素?

java - 带有 Java 代码生成的 Eclipse UML 插件

c# - GetFunctionPointerForDelegate 将委托(delegate)中的 String^ 参数转换成什么?

c++ - 代码块 16.01 找不到标题