【问题标题】:How do I invoke C++ compiler programmatically?如何以编程方式调用 C++ 编译器?
【发布时间】:2009-05-18 14:40:21
【问题描述】:

出于商业原因,我想创建一个 C# 应用程序,它将 C++ 文件/sn-p 作为输入,对其进行编译(可能在后台调用 C++ 编译器)并输出编译结果。

你知道这是怎么做到的吗?

提前致谢。

【问题讨论】:

    标签: c# c++ compiler-construction


    【解决方案1】:

    使用CL.exe

    【讨论】:

      【解决方案2】:

      查看Process 类。

      它提供启动外部应用程序所需的所有功能,包括编译器。

      现在,根据您选择的编译器,您需要仔细指定进程的启动参数,以便以可预测的方式进行编译。

      【讨论】:

        【解决方案3】:

        大多数编译器都支持命令行参数。 您只需要构建正确的命令并通过 shell 执行它,就像建议的 here 一样。 车 如果您不仅要构建单个文件,还要构建整个 .vcproj 文件 - 检查 devenv.exe 的命令行参数。如果我没记错的话是:

        devenv.exe /build my.vcproj
        

        【讨论】:

          【解决方案4】:

          您可以使用 Process.Start 对任意数量的命令行 C++ 编译器(如 gcc)进行 shell。

          【讨论】:

            【解决方案5】:

            您可以通过在命令行上调用任何 C++ 编译器来完成此操作。我确定编译结果可以重定向,以便编译完成后可以抓取。

            【讨论】:

              【解决方案6】:

              如果您尝试为 C++ 实现类似 SnippetCompiler 的功能,您可能需要查看其中一种 C/C++ 脚本语言。我一直很喜欢CInt

              【讨论】:

                【解决方案7】:

                当然可以,实际上 nmake 和其他类似 make 的实用程序一直调用编译器是很常见的做法。

                OTOH,如果您正在考虑将此解决方案部署给客户,您可能会因为所有细节(例如设置、文件所在位置、如何对结果做出反应、许可证、哪个 c++ 编译器)而陷入困境部署等。

                另一个更简单的选项(恕我直言)是直接从 C# 程序调用 C# 编译器来代替 C++ 来编译 C# sn-p。然后文件可以保留在内存中,您无需在编译之前保存任何文件。网上有很多例子展示了如何做到这一点。此解决方案的另一个优点是您已经拥有 C# 编译器,因此也无需安装 C++ 编译器。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-07-09
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-05-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-12-12
                  相关资源
                  最近更新 更多