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的区别是啥?

如何下载microsoft visual studio

microsoft visual c++里的编译在哪里?

使用pip安装Twisted for Python:错误:Microsoft Visual Studio失败,退出状态为2

Microsoft Visual Studio 2013安装及试用

microsoft visual studio 2008找不到一个或多个组件,请重新安装应用程序 的原因都有哪些?