2014-01-22 98 views
0

我已经创建了一个MFC项目,并且我想使用它编译另一个MFC项目。 我正在使用system()函数来实现,但它不起作用。从另一个项目编译Visual Studio 2010项目

system("set PATH=""C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE"" && devenv C:/project_path/Project.sln /Build "); 

首先,我为了将路径设置为Windows的提示知道devenv命令,然后我建我的项目。 我已经在Windows命令提示符下测试了命令行,它工作正常。通过在我的代码中使用它,它不会识别devenv命令。我究竟做错了什么?如果还有其他方法可以继续进行,请告诉我吗?

回答

0

“set”语句是临时执行命令本身的。 当您退出系统命令时,所有修改都将丢失。

如果你想拥有这些执着,你必须使用SETX这样的:

setx PATH=%PATH%;"C:/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE" /M 

注:最后不要忘记/ M。

但是我不认为这是你想要做的事情,因为每次你执行这个陈述你都会再次添加额外的路径。

我建议你最终将当前的PATH存储在OLDPATH之类的东西中,并将其放回底部。

setX OLDPATH=%PATH% /M 
setX PATH=%PATH%; .... /M 
devenv C:/project_path/Project.sln /Build 
setX PATH=%OLDPATH% /M 
+0

谢谢你的回答。/M是什么意思?它是分开命令吗? – oro777

+0

不是要分开命令,而是必须使用/ M来设置系统环境中的新值,否则命令将像标准设置一样工作,并在本地环境中记忆新值。 – prompt

0

使用批处理文件。你不能在系统中使用SET,因为它只是修饰当前的环境(请阅读有关SETX的其他答案)。

我不想让这样的环境变量在我的系统中是静态的,因为我经常安装了2008,2010,2012和2013。设置所有必需的环境变量

最好的办法是 CALL“%VS100COMNTOOLS%VSVARS32.BAT”

之后,你可以方便地调用devenv的不使用的路径。 但是所有行必须在一个批处理中,以便命令处理器使用一个环境。

相关问题