Как динамически скомпилировать файл C / C ++ из C # - PullRequest
0 голосов
/ 31 января 2019

Я хочу динамически скомпилировать файл C / C ++ из кода C #.

Например, у меня есть файл c ++ (test.cpp)

#include <iostream>
using namespace std;
void main()
{
    cout << "Hello, world, from Visual C++!" << endl;
}

Вот код C #, где яхочу скомпилировать файл * .cpp.

class Program
{
    static void Main(string[] args)
    {
        var start = new ProcessStartInfo();

        start.FileName = @"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.exe";
        start.Arguments = @" /EHsc D:\test\test.cpp /out:D:\test\test.exe";

        start.UseShellExecute = false;
        start.RedirectStandardOutput = true;

        string StandardOutput = "";

        using (var process = Process.Start(start))
        {
            // Could be useful to eventually track error
            using (var reader = process?.StandardOutput)
            {
                StandardOutput += reader?.ReadToEnd();
            }
        }

        Console.WriteLine(StandardOutput);
    }
}

При выполнении кода выдается следующая ошибка.

Microsoft (R) C / C ++ Оптимизирующая версия компилятора 19.16.27026.1 для x64Авторское право (C) Microsoft Corporation.Все права защищены.

cl: Предупреждение командной строки D9035: опция 'o' устарела и будет удалена в следующем выпуске test.cpp D: \ test \ test.cpp (1): фатальная ошибка C1034: iostream: путь включения не задан

enter image description here

1 Ответ

0 голосов
/ 31 января 2019

попробуйте сначала запустить

 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat

Для одновременного выполнения обоих сценариев вы можете использовать следующий подход

Process.Start("cmd.exe", "/c \"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat\"\n\"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.exe\" /EHsc D:\test\test.cpp /out:D:\test\test.exe");

Для получения дополнительной информации: ПроверкаЭто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...