2014-09-24 66 views
0

假设我们有第一个程序Program1.exe,它包含创建和编译另一个名为Program2.exe的应用程序的必要信息。实际上它也可以从txt文件或其他东西中加载这些信息。以编程方式创建并编译来自程序的C++

谷歌搜索,我发现,这是 “容易” 在C#做,使用Visual Studio:

How to programatically build and compile another c# project from the current project

Programmatically Invoke the C# Compiler

的问题是,我不使用(和不能使用)C#,但是C++。总结起来,我的问题是如果我可以使用C++来做同样的事情。 我宁愿在没有附加库的情况下使用它,但如果这不可行,或者如果它太难做,您也可以推荐任何允许它的库。

我想你可能会注意到它,但我的目标是在Windows下使用它,所以我不在乎它是否不便携。

谢谢大家。

+0

这看起来像一个非常笨手的技术。如果您分享更高层次的目标,我们可能会完全为您提供有关不同策略的建议。话虽如此,我认为[llvm](http://llvm.org/)可能有助于在运行时创建可执行文件,尽管我认为它仍然不如在C#中那么简单。 – 2014-09-24 13:54:02

+0

@MagnusHoff感谢Magnus的建议。正如你所说,我不认为会有像.NET平台那样简单的方法。我会看看你建议我的那个图书馆。 – JuanGM 2014-09-24 14:09:28

回答

3

对于C++程序来说,编译和运行另一个基于存储在文本文件中的代码是很平凡的(如果可能是奇数)。但是,调试其他程序不是。

+0

但只有当您的程序在安装了编译器/链接器的计算机上运行时才有效。否则,你可能不得不在你的“简单”程序中运送一个完整的C++编译器。 – tgmath 2014-09-24 14:02:38

+0

@Paul正如tgmath所说,我无法确保计算机中存在编译器,所以它应该能够编译代码本身。 – JuanGM 2014-09-24 14:06:51

+0

+1,但为OP提供一些实际的线索 - 检查'system()'和'execv'-函数系列来学习如何调用另一个程序,并使用它来运行您选择的C++编译器源代码,这是最简单的写入临时文件。你碰巧正在运行一个编译器的意义不大。你并不是说你想从'program1.exe'执行'program2.exe',但是可以用同样的方式完成。 @ user3869641 - 你可以检查是否有编译器有一个你可以使用的库API,但实际上这是一个非常不合理的约束...... – 2014-09-24 14:08:04