我正在使用Visual Studio 2012.
我有一个包含源文件“1.cpp”的Win32控制台项目。我想在“1.cpp”的源代码中编译一些其他C ++文件(比如说“2.cpp”)。
我试过这个 - :
int main()
{
system("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\vcvarsall.bat");
system("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\bin\\cl.exe /EHsc 2.cpp");
}
我这样做是因为我想使用/D
选项编译“2.cpp”来定义“2.cpp”中的宏,其值在“1.cpp”内计算。
像这样的东西 - :
int main()
{
string mystring;
system("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\vcvarsall.bat");
system(("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\bin\\cl.exe /EHsc /DMYMACRO="+mystring+" 2.cpp").c_str());
}
尽管在调用“cl.exe”之前执行了“vcvarsall.bat”,但我仍然收到错误消息“程序无法启动,因为您的计算机缺少mspdb110.dll。请尝试重新安装程序解决了这个问题。“
如上所述here,我可能需要设置一些环境变量 有没有任何方法可以在不需要设置环境变量的情况下执行此操作?如果不是,那么如何在源“1.cpp”中设置这些变量?
答案 0 :(得分:2)
我找到了一种简单的方法 -
system(("C:\\\"Program Files...vcvarsall.bat && C:\\\"Program Files...cl.exe /EHsc /DMYMACRO="+mystring+" 2.cpp").c_str());
答案 1 :(得分:1)
每次调用“system”都会产生一个新进程。在一个进程中调用cvarsall不会影响其他进程。
您需要使用这两个命令创建批处理文件,并为
调用“system”cmd / c mybat.bat