【问题标题】:CMake & QT5 - QT5_WRAP_UI not generating ui header filesCMake & QT5 - QT5_WRAP_UI 不生成 ui 头文件
【发布时间】:2014-11-10 14:03:28
【问题描述】:

我有一个简单的 CMakeLists.txt,如下所示:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(calculator)

FIND_PACKAGE(Qt5Core)
FIND_PACKAGE(Qt5Gui)
FIND_PACKAGE(Qt5Widgets)

SET(CMAKE_AUTOMOC ON)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

SET(calculator_SOURCES main.cpp mainwindow.cpp)
SET(calculator_HEADERS mainwindow.h)
SET(calculator_FORMS mainwindow.ui)

QT5_WRAP_CPP(calculator_HEADERS_MOC ${calculator_HEADERS})
QT5_WRAP_UI(calculator_FORMS_HEADERS ${calculator_FORMS})

ADD_LIBRARY(calculator_CONFIG ${calculator_HEADERS_MOC} ${calculator_FORMS_HEADERS})
QT5_USE_MODULES(calculator_CONFIG Widgets)

ADD_EXECUTABLE(calculator ${calculator_SOURCES} ${calculator_CONFIG})
QT5_USE_MODULES(calculator Core Gui Widgets)

当我尝试使用cmake -G "Unix Makefiles" 和随后的make 构建项目时,控制台说找不到ui_mainwindow.h。问题是什么?是我的 cmake 文件吗?


完整错误输出:

[ 22%] Building CXX object CMakeFiles/calculator.dir/mainwindow.cpp.o
/home/centurion/Code/cpp/calculator/mainwindow.cpp:2:27: fatal error: ui_mainwindow.h: No such file or directory
 #include "ui_mainwindow.h"
                           ^
compilation terminated.
make[2]: *** [CMakeFiles/calculator.dir/mainwindow.cpp.o] Error 1
make[1]: *** [CMakeFiles/calculator.dir/all] Error 2
make: *** [all] Error 2

【问题讨论】:

    标签: c++ qt makefile cmake


    【解决方案1】:

    我在使用 cmake 3.2.2 时遇到了同样的问题。尝试使用

    SET(CMAKE_AUTOUIC ON)  
    

    如果没有生成 ui 文件。也许默认行为最近发生了变化?

    【讨论】:

    • 我在 3.2.2 也有同样的问题。 SET(CMAKE_AUTOUIC ON) 解决了!
    • 这也解决了我的问题。如果能修复官方文档中的教程就好了。
    【解决方案2】:
    1. 使用小写 CMake 命令。多年来,这一直是明智的惯例。

    2. 您为什么同时使用AUTOMOCqt5_wrap_cppAUTOMOC 旨在替换宏。 http://www.cmake.org/cmake/help/v3.0/manual/cmake-qt.7.html#automoc

    3. 如果使用 CMake 2.8.11 或更高版本,则不要使用qt5_use_modules。在 CMake 2.8.11 发布之前,我将其写为权宜之计。 target_link_libraries 命令执行 qt5_use_modules 的操作,但更好更通用。 http://doc-snapshot.qt-project.org/qt5-5.3/cmake-manual.html

    4. 该库没有自己的资源,也未被使用。您显然在这里“做错了”。将 ${calculator_FORMS_HEADERS} 变量用法移动到可执行文件源。然后在解决第 2 点之后,删除库。

    【讨论】:

    • 别问我;我按照教程让我达到了这一点。谢谢你的回答。
    • 这个答案听起来有点居高临下;我希望我只是误读(我没有-1)。 CMake 本身很难推理,而特殊的 Qt 魔法并没有让它变得更容易。
    • 我来到这个问题是在寻找其他东西,但 #2 引起了我的兴趣,所以我从 CMakeLists.txt 中删除了 qt5_wrap_cpp,它因未解决的外部符号错误而中断。添加回来,它工作正常。我将 CMAKE_AUTOMOC 设置为 ON。我最终确实删除了 automoc 设置,因为它似乎什么也没做。
    • 3.中的文档链接失效了。
    • 我来到这里是因为有一个类似的问题,但是这些不“理智”的东西都没有被使用,所以我一定找到了比提出这个问题的可怜人更多的最新示例/教程。作为 CMake 的新手,但对现代软件和构建过程和工具并不陌生,这并不容易理解。最重要的是,我们都知道似乎没有人会清除过时的“指南”等网络。
    【解决方案3】:

    我在 Mac OS X 上也遇到过同样的问题。没有生成 Ui 表单头文件。

    我通过使用 QtDesigner 手动生成 .h 文件解决了我的问题。在ui表单上进行更改时,头文件生成良好。

    注意:如果我添加了一些其他的ui表单,标题是自动生成的,不需要为这些其他的ui手动生成头文件。

    编辑:只有在不用于 cpp 代码时,头文件才会在第一次构建时很好地生成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-11
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2020-06-23
      相关资源
      最近更新 更多