2

Qt プロジェクトを QMake から CMake に移行しようとしていますが、MSVC10 を使用して Windows 7 でライブラリをビルドしようとするとエラーが発生します。私の CMakeLists.txt ファイルは次のとおりです。

cmake_minimum_required( VERSION 2.8.11 )

project( MyLibrary )
find_package(Qt4 REQUIRED)

set( CMAKE_AUTOMOC ON )
set( QT_USE_QTSCRIPT TRUE )

include( ${QT_USE_FILE} )
include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include ${QT_INCLUDES} )

set( MyLibrary_SOURCES
    src/connection.cpp
    src/mylibrary.cpp
    src/node.cpp
    src/socket.cpp
    include/connection.h
    include/mylibrary.h
    include/node.h
    include/socket.h
    include/MyLibrary_global.h
)

add_library(MyLibrary SHARED ${MyLibrary_SOURCES})

target_link_libraries(MyLibrary ${QT_LIBRARIES} )

実行すると、生成された nmake Makefile でビルドしようとすると、次のエラーが発生します。

C2491:'Connection::staticMetaObjectExtraData' : definition of dllimport static data member not allowed
C2491: 'Connection::staticMetaObject' : definition of dllimport static data member not allowed

私は CMake を初めて使用するので、CMakeLists.txt ファイルに何か不足しているのか、それとも Qt で使用するためのトリックがあるのか​​ わかりません。エラーが発生しているファイルは、MOC で生成されたファイルであることに注意してください。

編集:だからの出力

メッセージ(${QT_INCLUDES})

は次のとおりです (書式は読みやすくするためです)。

C:/Qt/4.8.3/include/QtDesigner
C:/Qt/4.8.3/include/QtDeclarative
C:/Qt/4.8.3/include/QtScriptTools
C:/Qt/4.8.3/include/QtDBus
C:/Qt/4.8.3/include/QtDesigner
C:/Qt/4.8.3/include/QtXml
C:/Qt/4.8.3/include/QtSql
C:/Qt/4.8.3/include/QtOpenGL
C:/Qt/4.8.3/include/QtMultimedia
C:/Qt/4.8.3/include/QtNetwork
C:/Qt/4.8.3/include/phonon
C:/Qt/4.8.3/include/QtXmlPatterns
C:/Qt/4.8.3/include/QtWebKit
C:/Qt/4.8.3/include/QtHelp
C:/Qt/4.8.3/include/QtUiTools
C:/Qt/4.8.3/include/QtTest
C:/Qt/4.8.3/include/QtScript
C:/Qt/4.8.3/include/QtSvg
C:/Qt/4.8.3/include/Qt3Support
C:/Qt/4.8.3/include/QtGui
C:/Qt/4.8.3/include/QtCore
C:/Qt/4.8.3/mkspecs/default
C:/Qt/4.8.3/include
C:/Qt/4.8.3/include/QtCore

auto-moc を使用しないようにしましたが、それでも同じ結果とエラーが発生します。

4

4 に答える 4

1

たいていの

http://www.cmake.org/cmake/help/v3.0/manual/cmake-qt.7.html

CMake 2.8.11 にも適用されます。Use ファイルではなく、インポートされたターゲットを使用します。

于 2014-03-05T13:47:30.343 に答える
0

わかりました、3 つのアイデアがあります。解決策につながるかどうかはわかりませんが、うまくいく可能性があります。

まず、何が入ってい${QT_INCLUDES}ますか?いくつか追加message(${QT_INCLUDES})して、出力を共有してください。

2 番目のアイデアは、モックでエラーが発生するため、手動でモックすることです。このために、を削除しset( CMAKE_AUTOMOC ON )て追加してみてください:

set(QT_USE_QTUITOOLS true)

QT4_WRAP_UI(UI     UiFiles.ui)

QT4_WRAP_CPP(MOC3  QObjectFiles.h)

add_library(..........
                      ${UI} 
                      ${MOC3})

私の3番目のアイデアは、を削除することSHAREDです。これによりエラーが発生する可能性がありますが、それについてはわかりません。

あなたが得たものを共有してください、私は助けようとします:)

于 2013-09-17T10:12:51.660 に答える