CMake&QT5 - QT5_WRAP_UI不生成ui头文件

Ken*_*den 11 c++ qt makefile cmake

我有一个简单的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)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用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
Run Code Online (Sandbox Code Playgroud)

小智 18

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

SET(CMAKE_AUTOUIC ON)  
Run Code Online (Sandbox Code Playgroud)

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


ste*_*ire 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 的特殊魔力也没有让它变得更容易。 (18认同)
  • 别问我;我按照教程让我达到了这一点。感谢您的回答。 (2认同)