CMake 告诉我啥(Windows 上的错误)?

Posted

技术标签:

【中文标题】CMake 告诉我啥(Windows 上的错误)?【英文标题】:What is CMake telling me (error on Windows)?CMake 告诉我什么(Windows 上的错误)? 【发布时间】:2019-02-20 07:47:32 【问题描述】:

我不认为自己是 CMake 的新手,但我无法让它在我购买的较新的 Windows 机器上运行。 only 适合我的生成器是一个实际的 Visual Studio 项目生成器(例如“Visual Studio 14 2015 Win64”)。我尝试了几个最新版本的 CMake(3.12.2、3.10.3),当我尝试另一个生成器(NMake Makefiles JOM、NMake Makefiles、CodeBlocks - NMake Makefiles 等)时,总是得到以下结果。我应该补充一点,我正在以管理员身份打开的 VS2015 x64 本机工具命令提示符窗口中运行此命令行。

D:\Projects\build-QWar-newest>cmake -G "NMake Makefiles JOM" ../QWar

错误日志:

Determining if the C compiler works failed with the following output:
Change Dir: D:/Projects/build-QWar-newest/CMakeFiles/CMakeTmp

Run Build Command:"jom" "/NOLOGO" "cmTC_8b88c\fast"
jom: parallel job execution disabled for Makefile

    C:\Qt\Tools\QtCreator\bin\jom.exe -f CMakeFiles\cmTC_8b88c.dir\build.make /nologo -L CMakeFiles\cmTC_8b88c.dir\build

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

    C:\PROGRA~2\MICROS~1.0\VC\bin\amd64\cl.exe @C:\Users\Rich\AppData\Local\Temp\testCCompiler.c.obj.19968.0.jom

testCCompiler.c

Linking C executable cmTC_8b88c.exe

    "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\cmTC_8b88c.dir --manifests  -- C:\PROGRA~2\MICROS~1.0\VC\bin\amd64\link.exe /nologo @CMakeFiles\cmTC_8b88c.dir\objects1.rsp @C:\Users\Rich\AppData\Local\Temp\cmTC_8b88c.exe.19968.375.jom

MT: command "mt /nologo /manifest CMakeFiles\cmTC_8b88c.dir/intermediate.manifest /out:CMakeFiles\cmTC_8b88c.dir/embed.manifest /notify_update" failed (exit code 0x0) with the following output:
The system cannot find the file specifiedjom: D:\Projects\build-QWar-newest\CMakeFiles\CMakeTmp\CMakeFiles\cmTC_8b88c.dir\build.make [cmTC_8b88c.exe] Error 2

jom: D:\Projects\build-QWar-newest\CMakeFiles\CMakeTmp\Makefile [cmTC_8b88c\fast] Error 2

这是一个简单的项目 - 这是 D:\Projects\QWar 中的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)

project(QWar)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

find_package(Qt5Core CONFIG REQUIRED)

add_executable($PROJECT_NAME
    main.cpp
    Card.cpp
    Deck.cpp
    Player.cpp
    Round.cpp
    Game.cpp)

target_link_libraries($PROJECT_NAME Qt5::Core)

编辑:重新格式化错误日志

我不确定我做错了什么。我已经让它与旧版本的 CMake 一起工作,事实上我有另一台机器使用 Qt5.7/CMake3.6.1 并且我在上面尝试的工作。

【问题讨论】:

将日志格式化为 blockqoute 会删除换行符并使其不可读。请重新插入日志,并将它们格式化为代码。 (我无法更改当前变体中的格式,因为一些换行符已经丢失。)。简而言之,您在测试编译器时遇到了错误。错误消息(其有价值的部分)是“系统找不到指定的文件......”。您可以搜索此消息,在这种情况下,您会找到许多答案,每个答案都适用于某些特定情况。尝试确定哪种情况是您的。 谢谢 - 我已经重新格式化了 CMakeError.log。 【参考方案1】:

感谢 kitware 的 Gregor,解决方案是确保“mt.exe”在系统路径中。它附带与 Visual Studio 分开安装的 Windows SDK。

上面的错误并没有明确指出 mt 是丢失的文件。在使用 -debug-trycompile 运行 cmake 后,我可以自己运行临时构建,并且错误变得更加清晰。如果不使用 -debug-trycompile,当编译器测试失败时,它会删除默认生成的临时文件。

【讨论】:

以上是关于CMake 告诉我啥(Windows 上的错误)?的主要内容,如果未能解决你的问题,请参考以下文章

在Windows 10上的CLion / CMake中“无法找到SFML”错误?

这个应用程序有两个轮播幻灯片在同一行运行,但我只想要一个。请告诉我啥是问题

告诉 CMake 在 Windows 中哪里可以找到 z.lib

PostgreSQL 解释到底告诉我啥?

从现有 cmake 应用程序导入的 Netbeans 项目无法在 Windows 上构建并出现文件系统错误

cmake Windows 10 SDK