CMake & QT5 - QT5_WRAP_UI не генерирует файлы заголовков ui
У меня есть простой 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
Ответы
Ответ 1
-
Используйте команды нижнего регистра CMake. Это было разумное соглашение в течение многих лет.
-
Почему вы используете как AUTOMOC, так и qt5_wrap_cpp? AUTOMOC предназначен для замены макроса. http://www.cmake.org/cmake/help/v3.0/manual/cmake-qt.7.html#automoc
-
Если вы используете 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
-
Библиотека не имеет собственных источников и не используется. Вы явно "делаете это неправильно" здесь. Переместите использование переменной ${calculator_FORMS_HEADERS} в исходные файлы. Затем, после адресации точки 2, удалите библиотеку.
Ответ 2
Я работал в той же проблеме с cmake 3.2.2. Попробуйте использовать
SET(CMAKE_AUTOUIC ON)
если файлы ui не сгенерированы. Может быть, поведение по умолчанию изменилось в последнее время?
Ответ 3
Я столкнулся с той же проблемой в Mac OS X. Файл заголовка формы Ui не генерируется.
Я решил свою проблему, создав файл .h с помощью QtDesigner. Когда изменения сделаны в форме ui, заголовочный файл хорошо сгенерирован.
Примечание: если я добавляю некоторые другие формы ui, заголовки генерируются автоматически, без необходимости генерировать заголовочный файл вручную для этих других ui.
EDIT: файл заголовка хорошо сгенерирован при первой сборке, только если он не используется в коде cpp.