Qt с Cmake: set(QT_USE_QTWEBKIT TRUE) не работает

Я пытаюсь создать приложение на основе Qt, используя cmake (это то, что мне дал Kdevelop). Я пытался использовать QWebView;

QWebView *webView = new QWebView( this );
webView->load(QUrl("http://google.ca"));

Но это не удалось с ошибками Undefined Reference...

undefined reference to `QWebView::QWebView(QWidget*)'
undefined reference to `QWebView::load(QUrl const&)'

Я посмотрел его, и мне нужно было добавить QTWEBKIT в мой проект, но все решения говорили, что нужно добавить его в мой файл .pro... И я не использую .pro. В документации QT сказано добавить «set (QT_USE_QTWEBKIT TRUE)» в мой файл CMAKE, теперь это мой файл CMakeLists.txt:

#-------------------------------------------------------------------------------
# Corrections Tool CMAKE list
#-------------------------------------------------------------------------------
project(corrections)


# Versioning Requirements
#-------------------------------------------------------------------------------
cmake_minimum_required(VERSION 2.6)
find_package(Qt4 REQUIRED)


# Include QT Librtaries
#-------------------------------------------------------------------------------
set(QT_USE_QTWEBKIT TRUE)


# Set Sources
#-------------------------------------------------------------------------------
set(corrections_SRCS corrections.cpp main.cpp utilities.cpp prettySplash.cpp)


#The Rest
#-------------------------------------------------------------------------------
include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
qt4_automoc(${corrections_SRCS})
add_executable(corrections ${corrections_SRCS})
target_link_libraries(corrections ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
install(TARGETS corrections RUNTIME DESTINATION bin)

Но я все еще получаю ошибки, так что либо я сделал это неправильно, не в том месте и т. д. Я также несколько раз очищал и перенастраивал свой проект, чтобы убедиться, что я не использовал плохо сгенерированный make-файл.

Как мне исправить конфигурацию cmake, чтобы она действительно работала, или преобразовать мой проект в использование .pro (с минимальным стрессом и душевной болью)?

Спасибо.


person Kver    schedule 06.09.2013    source источник
comment
Обычно я использую ${QT_LIBRARIES} вместо ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}..   -  person drescherjm    schedule 06.09.2013


Ответы (2)


Канонический способ выбора компонентов Qt в CMake — указать их в вызове find_package, а затем включить ${QT_USE_FILE}

FIND_PACKAGE( Qt4 COMPONENTS QtWebKit REQUIRED )
INCLUDE( ${QT_USE_FILE} )

...


TARGET_LINK_LIBRARIES( corrections ${QT_LIBRARIES} )

Это уже настраивает включаемые каталоги и устанавливает ${QT_LIBRARIES} для содержания всех подходящих библиотек Qt (т. е. выбранного вами компонента и всех библиотек Qt, от которых он зависит). Таким образом, вам не нужно вручную добавлять библиотеки, перечисляя их по отдельности, как в вашем примере.

Правка: дополнительное объяснение: COMPONENTпараметр для FIND_PACKAGE на самом деле делает то же самое, что и ваш ручной вызов для установки QT_USE_WEBKIT. Но эта переменная оценивается/используется только в UseQt4.cmake, который включается (и "выполняется") командой INCLUDE. Дополнительные сведения см. в документации CMake для FindQt4.

person Johannes S.    schedule 06.09.2013

Похоже, вы не связываетесь со всеми библиотеками Qt. Используйте ${QT_LIBRARIES} вместо ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} в ваших target_link_libraries

target_link_libraries(corrections ${QT_LIBRARIES} )
person drescherjm    schedule 06.09.2013
comment
Я только что попробовал это, и теперь все (Qt) имеет ошибку неопределенной ссылки. Хм... - person Kver; 06.09.2013
comment
Как сказал Йоханнес С., вам также не хватает INCLUDE(${QT_USE_FILE}) - person drescherjm; 06.09.2013
comment
О, не видел его комментарий до сих пор. Это работает! Хотя я немного измучен, я не работал с С++ полвека; ржавый ржавый ржавый Я... Веб-разработка слишком снисходительна ;P - person Kver; 06.09.2013