【问题标题】:CMake "NMake Makefiles" generator fails to compileCMake“NMake Makefiles”生成器无法编译
【发布时间】:2015-11-20 00:13:07
【问题描述】:

我正在编译本教程中的简单应用程序: https://www.johnlamp.net/cmake-tutorial-1-getting-started.html (仅 main.cc、ToDo.cc 和 ToDo.h 文件)。

我安装了 Visual Studio 2015,当我使用它的生成器时,VS 项目生成成功:

PS C:\data\OtherTech\cmaketest\build> cmake "Visual Studio 14 2015" ..

但是,如果我使用“NMake Makefiles”或“Unix Makefiles”生成器:

PS C:\data\OtherTech\cmaketest\build> cmake "NMake Makefiles" ..

我收到以下错误:

> PS C:\data\OtherTech\cmaketest\build> cmake -G "NMake Makefiles" ..
-- The C compiler identification is MSVC 19.0.23026.0
-- The CXX compiler identification is MSVC 19.0.23026.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe -- broken
CMake Error at C:/Users/user1/Desktop/Apps/cmake-3.4.0-win32-x86/share/cmake-3.4/Modules/CMakeTestCCompiler.cmake:61 (
message):
  The C compiler "C:/Program Files (x86)/Microsoft Visual Studio
  14.0/VC/bin/cl.exe" is not able to compile a simple test program.

  It fails with the following output:

   Change Dir: C:/Data/OtherTech/cmaketest/build/CMakeFiles/CMakeTmp



  Run Build Command:"nmake" "/NOLOGO" "cmTC_6fd86\fast"

        "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\nmake.exe" -f
  CMakeFiles\cmTC_6fd86.dir\build.make /nologo -L
  CMakeFiles\cmTC_6fd86.dir\build

  Building C object CMakeFiles/cmTC_6fd86.dir/testCCompiler.c.obj

        C:\PROGRA~2\MICROS~3.0\VC\bin\cl.exe
  @C:\Users\user1\AppData\Local\Temp\nm5A8B.tmp

  testCCompiler.c

  Linking C executable cmTC_6fd86.exe

        C:\Users\user1\Desktop\Apps\cmake-3.4.0-win32-x86\bin\cmake.exe -E
  vs_link_exe --intdir=CMakeFiles\cmTC_6fd86.dir --manifests --
  C:\PROGRA~2\MICROS~3.0\VC\bin\link.exe /nologo
  @CMakeFiles\cmTC_6fd86.dir\objects1.rsp
  @C:\Users\user1\AppData\Local\Temp\nm5B29.tmp

  The parameter is incorrectRC Pass 1 failed to run.

  NMAKE : fatal error U1077:
  'C:\Users\user1\Desktop\Apps\cmake-3.4.0-win32-x86\bin\cmake.exe' :
  return code '0xffffffff'

  Stop.

  NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio
  14.0\VC\bin\nmake.exe"' : return code '0x2'

  Stop.





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:1 (project)


-- Configuring incomplete, errors occurred!
See also "C:/Data/OtherTech/cmaketest/build/CMakeFiles/CMakeOutput.log".
See also "C:/Data/OtherTech/cmaketest/build/CMakeFiles/CMakeError.log".

另外,如果我查看 CMakeFiles\CMakeError.log

它包含错误:

LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'

这是完整的输出:

    Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe 
Build flags: 
Id flags: 

The output was:
2
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

CMakeCCompilerId.c
Microsoft (R) Incremental Linker Version 14.00.23026.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:CMakeCCompilerId.exe 
CMakeCCompilerId.obj 
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'


Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe 
Build flags: 
Id flags: 

The output was:
2
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

CMakeCXXCompilerId.cpp
Microsoft (R) Incremental Linker Version 14.00.23026.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:CMakeCXXCompilerId.exe 
CMakeCXXCompilerId.obj 
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'


Determining if the C compiler works failed with the following output:
Change Dir: C:/Data/OtherTech/cmaketest/build/CMakeFiles/CMakeTmp

Run Build Command:"nmake" "/NOLOGO" "cmTC_6fd86\fast"
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\nmake.exe" -f CMakeFiles\cmTC_6fd86.dir\build.make /nologo -L                  CMakeFiles\cmTC_6fd86.dir\build

Building C object CMakeFiles/cmTC_6fd86.dir/testCCompiler.c.obj

    C:\PROGRA~2\MICROS~3.0\VC\bin\cl.exe  @C:\Users\user1\AppData\Local\Temp\nm5A8B.tmp

testCCompiler.c

Linking C executable cmTC_6fd86.exe

    C:\Users\user1\Desktop\Apps\cmake-3.4.0-win32-x86\bin\cmake.exe -E vs_link_exe --intdir=CMakeFiles\cmTC_6fd86.dir --manifests  -- C:\PROGRA~2\MICROS~3.0\VC\bin\link.exe /nologo @CMakeFiles\cmTC_6fd86.dir\objects1.rsp @C:\Users\user1\AppData\Local\Temp\nm5B29.tmp

The parameter is incorrectRC Pass 1 failed to run.

NMAKE : fatal error U1077: 'C:\Users\user1\Desktop\Apps\cmake-3.4.0-win32-x86\bin\cmake.exe' : return code '0xffffffff'

Stop.

NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\nmake.exe"' : return code '0x2'

Stop.

我正在搜索有关此错误的信息,并发现我的 PowerShell 会话可能无法访问某些环境变量,所以我去了 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC 并运行

.\vcvarsall.bat

配置环境,但不幸的是这没有帮助。

任何想法如何解决这个问题?

【问题讨论】:

    标签: visual-studio cmake visual-studio-2015


    【解决方案1】:

    从 Visual Studio 原生工具命令提示符而不是普通命令提示符运行 cmakecmake-gui。这样,所有必需的路径都正确设置并且对 cmake 可见。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。

      解决方案:

      在运行cmake -G "NMake Makefiles"之前, 在 CMD 中先执行VC Path\vcvarsall.bat

      PS:只能在 CMD 中工作,在 PowerShell 中不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多