如何在程序运行时生成和编译C ++代码?

时间:2012-04-16 12:02:10

标签: c++ compilation

基本上我需要的不是特定代码(当然会很棒),而只是关于如何实现目标的想法和方法。

1)我必须用C ++创建一个程序,它生成一个C ++代码的小例子,每次都有点不同。 (这对我没有任何问题,我将使用模板并在代码中随机化一些变量,这将使它每次都是唯一的。)

2)我将显示生成的代码,用户必须输入,他认为代码打印出来。

以下是问题的起点

3)我必须采取生成的代码并以某种方式编译它以获得一个字符串,其中包含程序打印出来的文本。

4)然后将字符串与用户输入的内容进行比较。

所以步骤3)是我停下来的地方,如果没有帮助就无法弄明白...我想在.cpp文件的函数中编写生成的代码,然后调用该函数,但我无法'让它发挥作用,所以我开始思考,我应该问专家,也许还有其他一些方法或想法如何实现这一点。

6 个答案:

答案 0 :(得分:2)

  1. 编写.cpp文件
  2. 调用编译器(或make或等效的构建系统)
  3. 如果编译失败,可能会显示错误?
  4. 如果编译成功,则运行生成的程序并显示输出
  5. 将2/3/4包装到脚本中可能最简单,并使用systempopen调用它。该脚本可以确保文件名是唯一的,将stderr折叠到stdout等等。

    您正在运行的程序并不是真正与已编译的代码交互,只是读取输出,因此将其保持为单独的过程可能是最简单的。该脚本可以添加一些标记,以帮助您区分编译器输出/错误与程序输出。


    我多年没有编写批处理文件,但是一旦你知道如何从命令行运行编译器(ref),你就可以编写一个脚本:

    1. 编译.cpp文件
    2. 执行生成的.exe
    3. 将其输出重定向到文件
    4. 然后,在C ++中,您只需将代码保存到脚本所需的.cpp文件中,执行类似system("myScript.bat")的脚本,然后读取输出文件。

      如果您不想编写单独的批处理脚本,可以只调用system一次来调用编译器,然后再次执行生成的.exe

答案 1 :(得分:1)

我认为你正在寻找一种编写c ++脚本的方法。请查看http://www.softintegration.com/或此stackoverflow问题Any tutorial for embedding Clang as script interpreter into C++ Code?

答案 2 :(得分:0)

我没有用过这个,但它是免费的,也不是编译而是解释。非常适合你的问题,值得一试......

http://root.cern.ch/drupal/content/cint

答案 3 :(得分:0)

为什么不使用system()调用独立编译生成的代码? system(“g ++ temp.cpp -o temp.exe); - 这种类型的东西,然后基于返回值 你可以像system(“temp.exe”)一样再次运行temp.exe;当然,您可以将temp.exe的输出打印到文件中并读取该文件以获取temp.exe到当前程序的输出。

答案 4 :(得分:0)

Geordi这样的东西会起作用吗?

答案 5 :(得分:0)

您可以像调用任何外部工具一样调用c ++编译器。例如。 system("g++ test.cpp")或使用popen或您的平台提供的任何其他内容。

您还可以考虑将实现编译器的库集成到您的程序中。为此你可能想看看clang和llvm。