Подтвердить что ты не робот

Как связать 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.

4b9b3361

Ответ 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/