Microsoft Visual Studio 2010 没有将构建工具放入 PATH 中以获得干净的目标?
Posted
技术标签:
【中文标题】Microsoft Visual Studio 2010 没有将构建工具放入 PATH 中以获得干净的目标?【英文标题】:Microsoft Visual Studio 2010 doesn't put build tools in PATH for clean target? 【发布时间】:2012-10-22 22:23:20 【问题描述】:我已经将 Microsoft Visual Studio 配置为使用 Makefile 配置类型,并且我已经编写了一个 makefile 来使用 Microsoft 工具构建我的项目。在项目配置的 NMake 部分下,我将构建命令行设置为 build.bat,这是一个使用我的 makefile 作为命令行参数调用 nmake 的文件,如下所示:
nmake /nologo /f makefile.x86.winnt.msvc2010
这很好用。
为了清理,我在我的 makefile 中编写了一个删除所有构建工件的目标。它看起来像这样:
#... the rest of the makefile
clean:
@erase /f /q $(OBJS) $(OUT) $(MAPFILE) $(PDBFILE)
@echo + clean
所以我将 clean 命令行设置为一个以 clean 为参数的 nmake 调用。像这样:
nmake /nologo /f makefile.x86.winnt.msvc2010 clean
我将此文本放入 clean.bat 并将其设置为“清洁命令行”,但它不起作用,因为调用 shell 无法找到 nmake。我在 clean 调用时检查了路径,MSVS 不包括路径中的构建工具(包括 nmake)用于清理。 (请注意,从 PATH 中包含 nmake 的 shell 运行上述 nmake 命令会成功)。
如何让 MSVS 在 PATH 中包含构建工具,以便可以在干净的命令行中调用 nmake?还是有更好的解决方案?
【问题讨论】:
我发誓更好的解决方案是不要在 Windows 上开发!我用 VS2010 整天都遇到类似的问题。 @Dan 我的大部分开发工作都是在 Linux 上进行的,但该项目是跨平台的,并且客户想要一个 Windows 版本。否则我不会打扰。 我也处于同样的困境中。试图在 Windows 上构建开源软件真是太荒谬了!如果可以的话,我会使用 Cygwin,但不幸的是,这不是一个选择 :( 我在 Ubuntu 上的单个apt-get
行上浪费了很多时间。
包管理是Linux 比windoze 做得更好way 的巨大管理之一。 抱怨 FOSS 的好处。 Windows 8 也比以前的版本更加荒凉。黑暗的日子。
我一直在祈祷 1) 我们不需要在 Win8 上支持用户,2) 如果我们这样做,我可以继续在 Win7 上构建,生成的程序将安装/运行在Win8上。这是 MS 似乎比 Linux 做得更好的一件事——向后和向前二进制兼容性。当然,在 Linux 上并不真正需要......
【参考方案1】:
引用Visual Studio Express Readme:
2。已知问题
2.4。产品问题
2.4.1。一般问题(产品)
2.4.1.14。清洁解决方案不适用于配置类型:Makefile (2010 RC)
在 nmake 解决方案上执行“清洁解决方案”会报告以下内容 错误:
1>------ Clean started: Project: makefiletest, Configuration: Debug Win32 ------ 1> 'nmake' is not recognized as an internal or external command, 1> operable program or batch file. 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.MakeFile.Targets(33,5): error MSB3073: The command "nmake /?" exited with code 9009. ================= Clean: 0 succeeded, 1 failed, 0 skipped ==========
要解决此问题:
打开 Visual Studio 命令提示符窗口。 输入
devenv /useenv
打开 Devenv。 现在“清洁解决方案”应该可以工作了。或者:
将批处理文件传递给 clean 命令。在批处理文件中,设置 nmake 工具以及其他构建环境的路径。
【讨论】:
是的,“专业”版也有同样的问题! 我试图通过使用 NodeJS 和 PhantomJS 来逃避,但发现它仍然需要这个垃圾才能工作!是时候使用 Ubuntu 和 VMWare 来解决我不得不使用的 Windows 垃圾了。【参考方案2】:当然你是对的,MSVC 从来没有把它的构建工具放在路径中!所以你有两个选择:
在 VisualStudio 命令提示符下运行批处理文件
将 %ProgramFiles%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat
添加到批处理文件的开头,以将所需的路径添加到 PATH。
【讨论】:
其中的第二个对我有用..当我在安装 Windows 8.1 后无法编译时,我确认我已经完成了它,然后注意到我弄乱了我系统中的路径语句PATH= 环境变量,但在升级之前就没有尝试过构建。谢谢!【参考方案3】:我认为更好的解决方案是将set PATH=$(VSInstallDir)\BC\bin;%PATH%
添加到批处理文件的开头。
如果您将来升级到 VS2012(或更高版本),这应该可以保证构建的未来。
【讨论】:
问题是visual studio创建的shell没有正确初始化的环境,所以当VS去运行单行shell命令来调用使用nmake(微软的gmake变体)的外部管理构建,它找不到 nmake 可执行文件并且构建失败。命令需要一行长的约束防止环境突变和脚本执行,AFAIK。此外,还需要设置其他变量才能运行构建。 Dan 的回答是唯一可行的解决方案,因为它超越了有问题的环境管理。 要让自己相信这一点,请在 Windows 命令提示符下运行以下命令两次。设置 FOO=BAR && echo %FOO%以上是关于Microsoft Visual Studio 2010 没有将构建工具放入 PATH 中以获得干净的目标?的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Visual C++与Visual Studio的区别是啥?
使用pip安装Twisted for Python:错误:Microsoft Visual Studio失败,退出状态为2