从当前文件编译另一个文件



我正在使用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

最新更新