编译当前文件中的另一个文件

时间:2014-06-06 17:07:18

标签: visual-studio visual-c++ visual-studio-2012 preprocessor conditional-compilation

我正在使用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”中设置这些变量?

2 个答案:

答案 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