我正在尝试使用cmake构建一个基于Qt的应用程序(这是Kdevelop给我的)。我试图使用QWebView;
QWebView *webView = new QWebView( this );
webView->load(QUrl("http://google.ca"));
但它因未定义参考错误而失败......
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)
但我仍然得到错误,所以我做错了,在错误的地方,等等。我也清理了几次并重新配置我的项目,确保我没有使用生成错误的makefile。
如何修复我的cmake配置以实际工作,或将我的项目转换为使用.pro(最小压力和心痛)?
谢谢。
答案 0 :(得分:2)
在CMake中选择Qt组件的规范方法是在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
的{{1}}参数实际上与您设置FIND_PACKAGE
的手动调用相同。但是,此变量仅在QT_USE_WEBKIT
中评估/使用,UseQt4.cmake
命令包含(和“执行”)。有关详细信息,请参阅CMake documentation of FindQt4。
答案 1 :(得分:0)
您似乎没有链接到所有Qt库。在target_link_libraries中使用$ {QT_LIBRARIES}代替$ {QT_QTCORE_LIBRARY} $ {QT_QTGUI_LIBRARY}
target_link_libraries(corrections ${QT_LIBRARIES} )