【发布时间】:2020-05-03 11:56:59
【问题描述】:
我正在寻找一种干净或简单的方法来以编程方式从 Windows 上的 C++ 应用程序编译 c 程序。
我用 C++ 编写的creator.exe 可执行文件应该从用户那里获取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 函数。现在我不想自己设置所有的环境变量,因为微软强烈反对这样做。我想使用Developer Command Prompt for VS2019,因为它已经正确设置了所有这些变量。从Developer Command Prompt我想执行msbuild编译result.c源代码。
现在的问题是我不确定是否可以从 C++ 调用 Developer Command Prompt 下的 msbuild?
我的意思是这样的:
#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。
【问题讨论】:
-
您可以在 Windows 上执行相同的操作。安装 MinGW,将二进制文件添加到您的
PATH并调用system("gcc result.c -DNAME Bob -o result");。恕我直言,一种更简洁的方法是某种脚本,例如 Makefile 或 PowerShell 脚本 -
有 command line tools 可用于 Visual Studio。
标签: c++ c windows visual-studio