【发布时间】:2009-05-18 14:40:21
【问题描述】:
出于商业原因,我想创建一个 C# 应用程序,它将 C++ 文件/sn-p 作为输入,对其进行编译(可能在后台调用 C++ 编译器)并输出编译结果。
你知道这是怎么做到的吗?
提前致谢。
【问题讨论】:
标签: c# c++ compiler-construction
出于商业原因,我想创建一个 C# 应用程序,它将 C++ 文件/sn-p 作为输入,对其进行编译(可能在后台调用 C++ 编译器)并输出编译结果。
你知道这是怎么做到的吗?
提前致谢。
【问题讨论】:
标签: c# c++ compiler-construction
使用CL.exe
【讨论】:
查看Process 类。
它提供启动外部应用程序所需的所有功能,包括编译器。
现在,根据您选择的编译器,您需要仔细指定进程的启动参数,以便以可预测的方式进行编译。
【讨论】:
大多数编译器都支持命令行参数。 您只需要构建正确的命令并通过 shell 执行它,就像建议的 here 一样。 车 如果您不仅要构建单个文件,还要构建整个 .vcproj 文件 - 检查 devenv.exe 的命令行参数。如果我没记错的话是:
devenv.exe /build my.vcproj
【讨论】:
您可以使用 Process.Start 对任意数量的命令行 C++ 编译器(如 gcc)进行 shell。
【讨论】:
您可以通过在命令行上调用任何 C++ 编译器来完成此操作。我确定编译结果可以重定向,以便编译完成后可以抓取。
【讨论】:
如果您尝试为 C++ 实现类似 SnippetCompiler 的功能,您可能需要查看其中一种 C/C++ 脚本语言。我一直很喜欢CInt。
【讨论】:
当然可以,实际上 nmake 和其他类似 make 的实用程序一直调用编译器是很常见的做法。
OTOH,如果您正在考虑将此解决方案部署给客户,您可能会因为所有细节(例如设置、文件所在位置、如何对结果做出反应、许可证、哪个 c++ 编译器)而陷入困境部署等。
另一个更简单的选项(恕我直言)是直接从 C# 程序调用 C# 编译器来代替 C++ 来编译 C# sn-p。然后文件可以保留在内存中,您无需在编译之前保存任何文件。网上有很多例子展示了如何做到这一点。此解决方案的另一个优点是您已经拥有 C# 编译器,因此也无需安装 C++ 编译器。
【讨论】: