Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Cmake QT5链接错误_C++_Cmake_Qt5 - Fatal编程技术网

C++ Cmake QT5链接错误

C++ Cmake QT5链接错误,c++,cmake,qt5,C++,Cmake,Qt5,在我看来,当使用cmake链接QT5库时,它们没有正确链接。 我有一个cmake文件,该文件设置了使用QT4或QT5的选项: if(USE_Qt5) if(NOT Qt5_PREFIX_PATH) set(Qt5_PREFIX_PATH /Applications/Qt/5.2.1/clang_64) endif(NOT Qt5_PREFIX_PATH) set(WINSDK_LIB_DIR "C:/Program Files (x86

在我看来,当使用cmake链接QT5库时,它们没有正确链接。 我有一个cmake文件,该文件设置了使用QT4或QT5的选项:

if(USE_Qt5)

    if(NOT Qt5_PREFIX_PATH)
        set(Qt5_PREFIX_PATH /Applications/Qt/5.2.1/clang_64)
    endif(NOT Qt5_PREFIX_PATH)
    set(WINSDK_LIB_DIR 
        "C:/Program Files (x86)/Windows Kits/8.0/Lib/win8/um/x64" 
        "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib"
    )
    set(CMAKE_PREFIX_PATH ${3RDPARTY} ${Qt5_PREFIX_PATH} ${WINSDK_LIB_DIR} ${CMAKE_PREFIX_PATH})
    message(STATUS "Qt5 prefix path set to: ${CMAKE_PREFIX_PATH}")
    find_package(Qt5Widgets)
    find_package(Qt5OpenGL)
endif(USE_Qt5)

if(USE_Qt4)
    file(GLOB QT4ROOTS ${3RDPARTY}/Qt/*/bin)
    find_program(QT_QMAKE_EXECUTABLE NAMES qmake qmake4 qmake-qt4 PATHS ${QT4ROOTS})
    find_package(Qt4 REQUIRED)
    set(QT_USE_QTOPENGL TRUE)
endif(USE_Qt4)
如果选择qt4没有问题,编译并执行。 编译Qt5会返回很多错误,在我看来这是一个链接问题:

/Applications/Qt/5.2.1/clang_64/lib/QtWidgets.framework/Headers/qsizepolicy.h:52:24: error: variable has incomplete type 'class Q_WIDGETS_EXPORT'
class Q_WIDGETS_EXPORT QSizePolicy
                       ^
/Applications/Qt/5.2.1/clang_64/lib/QtWidgets.framework/Headers/qsizepolicy.h:52:7: note: forward declaration of 'Q_WIDGETS_EXPORT'
class Q_WIDGETS_EXPORT QSizePolicy
      ^
/Applications/Qt/5.2.1/clang_64/lib/QtWidgets.framework/Headers/qsizepolicy.h:52:35: error: expected ';' after top level declarator
class Q_WIDGETS_EXPORT QSizePolicy
                                  ^
                                  ;
/Applications/Qt/5.2.1/clang_64/lib/QtWidgets.framework/Headers/qsizepolicy.h:163:31: error: expected a class or namespace
Q_DECLARE_OPERATORS_FOR_FLAGS(QSizePolicy::ControlTypes)

以下是我与图书馆的链接:

if(USE_Qt4 OR USE_Qt5)
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    set(CMAKE_AUTOMOC ON)
    # disable autolinking to qmain
    cmake_policy(SET CMP0020 OLD)
    set(USE_QT true)
    add_definitions(-DWITH_QT)
endif(USE_Qt4 OR USE_Qt5)

if(USE_Qt5)
#target_link_libraries(myProject
 #   Qt5::Widgets
#)
    qt5_use_modules(myProject Widgets)
endif(USE_Qt5)

这些都是非常明显的编译器错误-链接器对关键字、变量或类型一无所知,只知道符号。您缺少宏
Q\u WIDGETS\u EXPORT
的定义。能否显示您正在使用Qt5的CMakeList部分?理想情况下是一个CMake代码。哪个CMake版本?一个足够新的版本将应用“使用要求”自动引入定义等,但对于旧版本,您需要以某种方式手动将它们放入。