Я ищу простой или простой способ программной компиляции c программы из приложения C ++ на windows.
Мой creator.exe
исполняемый файл, написанный на C ++, должен принимать NAME
константу от пользователя и компилировать result.c
с этой константой, окончательно возвращающей пользователю скомпилированный result.exe
файл.
Пример:
// result.c
#ifndef NAME
#define NAME"undefined"
#endif
int main() {
printf("Welcome %s\n", NAME);
return 0;
}
На linux это просто, как я могу просто вызвать:
system("gcc result.c -DNAME Bob -o result");
Я новичок в windows и, возможно, есть более чистый способ выполнить такую компиляцию, тогда используя системную команду.
Обновление
Я очень рад видеть так много полезных ответов :) Я прочитал их все и решил использовать system
функция. Теперь я не хочу устанавливать все переменные среды самостоятельно, так как это настоятельно не рекомендуется Microsoft. Я хотел бы использовать Developer Command Prompt for VS2019
, поскольку все эти переменные уже установлены правильно. С Developer Command Prompt
Я хотел бы выполнить msbuild
для компиляции исходного кода result.c
.
Теперь проблема в том, что я не уверен, возможно ли вызвать msbuild
в Developer Command Prompt
из C ++?
Что я имею в виду под этим:
#define DEV_CMD "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Tools\\VsDevCmd.bat"
sprintf_s(cmd, "cmd \/S \/C \"\"%s\"\" && msbuild \/p:DefineConstants=\"DEBUG;NAME=\"%s\"\" ..\\result\\result.vcxproj", DEV_CMD, "Bob");
/* cmd /S /C ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat"" && msbuild /p:DefineConstants="DEBUG;NAME="Bob"" ..\result\result.vcxproj */
system(cmd);
Вышеприведенное, конечно, не работает, так как && откроет Developer Command Prompt
в одном процессе и затем запустит msbuild
в другом процессе.