我正在使用Visual Studio 2012。
我有一个Win32控制台项目包含源文件"1.cpp"。我想从"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从您的计算机中丢失。尝试重新安装程序以解决此问题。"
正如这里提到的,我可能需要设置一些环境变量。有没有什么方法可以做到这一点,而不需要设置环境变量?如果没有,那么如何从源文件"1.cpp"中设置这些变量呢?
我发现了一个简单的方法:
system(("C:\"Program Files...vcvarsall.bat && C:\"Program Files...cl.exe /EHsc /DMYMACRO="+mystring+" 2.cpp").c_str());
每次调用"system"都会生成一个新进程。在一个进程中调用cvarsmall不会影响另一个进程。
你需要用这两个命令创建一个批处理文件,并为
调用"system"cmd/c mybat.bat