Как связать QtMain в CMake с Qt5?
Я обновил код проекта от Qt4 до Qt5. Он использует CMake.
Преобразование получилось хорошо, за исключением одной строки команд Cmake, связанных с Qt.
Я не могу найти в текущей документации, например
Как установить связь с QtMain из CMake (с Qt5)?
Это единственный недостающий бит для преобразования моего проекта.
Может ли кто-нибудь указать мне на документ, объясняющий это или объяснив, как это сделать с Qt5? Мой Qt4-код работал правильно, но я не могу найти макрос Cmake для Qt5.
EDIT > Вот файл CMake, который у меня есть на данный момент: https://bitbucket.org/klaim/aos_qt5/src/593c195c4c6889f6968d68fca018ef425783a063/tools/aosdesigner/CMakeLists.txt?at=wip_qt5
Все qt5 необходимые макросы CMake были установлены правильно. Я верю, единственное, что не работает, - это привязка к QtMain, которые ничего не делают, как ожидалось, так как должен быть определенный способ Qt5 сделать это, что я не найти в документации Qt5.
Вы можете просмотреть историю файлов, чтобы узнать, как она работает с Qt4.
Ответы
Ответ 1
Из Qt docs, с которым вы связались, похоже, вы можете найти Qt5Core вместо Qt5Widgets. Это создаст импортированный целевой объект с именем Qt5::WinMain
. Из Qt docs:
Импортированные цели создаются для каждого модуля Qt. Это означает, что Qt5<Module>_LIBRARIES
содержит имя импортированной цели, а не путь к библиотеке.
...
Каждый модуль в Qt 5 имеет цель библиотеки с соглашением об именах Qt5::<Module>
find_package( Qt5Widgets REQUIRED )
find_package( Qt5Core REQUIRED )
...
add_executable( aosdesigner WIN32 ${AOSDESIGNER_ALL_FILES} )
target_link_libraries( aosdesigner
${Boost_LIBRARIES}
utilcpp
aoslcpp
Qt5::WinMain # <-- New target available via find_package ( Qt5Core )
)
qt5_use_modules( aosdesigner Widgets )
Я также рекомендую удалить два вызова link_libraries
, так как это устаревшая команда, и я бы уточнил CMake версии 2.8.9, а не только 2.8 как минимум, требуемый в верхней части вашего CMakeLists.txt, поскольку который требуется для qt5_use_modules
.
Ответ 2
EDIT: Спасибо за комментарий Archi (см. ниже), просто добавьте
target_link_libraries(<your_app> Qt5::WinMain)
или
target_link_libraries(<your_app> ${Qt5Core_QTMAIN_LIBRARIES})
в вашем приложении CMakeLists.txt. Оба синтаксиса работали для меня.
Ответ 3
Как и в CMake 2.8.11 и Qt 5.1, ссылка на Qt5:: WinMain является автоматической/неявной, если вы указываете WIN32 в своем вызове add_executable или иным образом устанавливаете свойство WIN32_EXECUTABLE target.
Презентация в
https://devdays.kdab.com/wp-content/uploads/2012/cmake.pdf
с видео в
http://www.youtube.com/watch?feature=player_detailpage&v=GJ0kMsLbk6Q#t=751
описывает функции, которые превратили его в CMake 2.8.11.
Подробнее о CMake с Qt см.
http://www.kdab.com/modern-cmake-with-qt-and-boost/