4

我已经将 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?还是有更好的解决方案?

4

3 回答 3

4

引用Visual Studio Express 自述文件

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 ==========

要解决此问题:

  1. 打开 Visual Studio 命令提示符窗口。
  2. 通过键入打开 Devenv devenv /useenv
  3. 现在“清洁解决方案”应该可以工作了。

或者:

将批处理文件传递给 clean 命令。在批处理文件中,设置 nmake 工具以及其他构建环境的 PATH。

于 2012-11-06T03:34:54.953 回答
3

当然你是对的,MSVC 从来没有把它的构建工具放在路径中!所以你在这里有两个选择:

  • 从 VisualStudio 命令提示符运行批处理文件

  • 添加%ProgramFiles%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat到批处理文件的开头以将所需的路径添加到 PATH。

于 2012-10-22T23:44:00.270 回答
0

我认为更好的解决方案是添加set PATH=$(VSInstallDir)\BC\bin;%PATH%到批处理文件的开头。

如果您将来升级到 VS2012(或更高版本),这应该是面向未来的构建。

于 2013-01-24T18:41:41.070 回答