2017-10-06 5 views
0

J'essaie de déployer mon widget personnalisé avec ce doc mais quand je compile seulement .h et dll sont copiés, et .lib pdb ne sont pas:Déployer personnalisés Qt Widgets

Ceci est mon .pro quand je le configurateur copie directive

message(Building...) 
QT   += widgets designer 

PLUGIN_CLASS_NAME = QKWidgets 

QTDIR_build { 
    message(Qt Build) 
    # This is only for the Qt build. Do not use externally. We mean it. 
    PLUGIN_TYPE = designer 
    load(qt_plugin) 
    CONFIG += install_ok 
} else { 
    message(Public Build) 
    # Public example: 

    TARGET  = $$qtLibraryTarget($$TARGET) 
    CONFIG  += plugin debug_and_release 
    TEMPLATE = lib 

    target.path = $$[QT_INSTALL_PLUGINS]/designer 
    #INSTALLS += target 


    headersDataFiles.path = $$[QT_INSTALL_HEADERS]/$$PLUGIN_CLASS_NAME/ 
    headersDataFiles.files = $$PWD/*.h 
    #INSTALLS += headersDataFiles 

    libraryFiles.path = $$[QT_INSTALL_LIBS] 
    CONFIG(debug, debug|release): libraryFiles.files = $$OUT_PWD/debug/*.lib $$OUT_PWD/release/*.pdb 
    CONFIG(release, debug|release): libraryFiles.files = $$OUT_PWD/release/*.lib 

    INSTALLS += target headersDataFiles libraryFiles 

    message(Lib dest: $$[QT_INSTALL_LIBS]) 
    message(Lib src: $$libraryFiles.files) 

} 

message(General Build) 

Edit: install_libraryFiles ne figure pas dans Makefile

Edit2:

Sortie:

Project MESSAGE: Building... 
Project MESSAGE: Public Build 
Project MESSAGE: Lib dest: C:/Qt/Qt5.9.0/5.9.1/msvc2017_64/lib 
Project MESSAGE: Lib src: C:/Users/SD/Documents/Studio/MyProject/Widgets/Build/Release/release/*.lib 
Project MESSAGE: General Build 
Project MESSAGE: Building... 
Project MESSAGE: Public Build 
Project MESSAGE: Lib dest: C:/Qt/Qt5.9.0/5.9.1/msvc2017_64/lib 
Project MESSAGE: Lib src: C:/Users/SD/Documents/Studio/MyProject/Widgets/Build/Release/release/*.lib 
Project MESSAGE: General Build 
Project MESSAGE: Building... 
Project MESSAGE: Public Build 
Project MESSAGE: Lib dest: C:/Qt/Qt5.9.0/5.9.1/msvc2017_64/lib 
Project MESSAGE: Lib src: C:/Users/SD/Documents/Studio/MyProject/Widgets/Build/Release/debug/*.lib C:/Users/SD/Documents/Studio/MyProject/Widgets/Build/Release/release/*.pdb 
Project MESSAGE: General Build 
+0

Que signifie "message (Lib src: $$ libraryFiles.files)" imprime? Pouvez-vous montrer Makefile généré? – Xplatforms

+0

Je modifie mon post. Je comprends pourquoi .lib ne sont pas copiés. C'est parce que la lib n'est pas créée au bon moment. lorsque je lance qmake une seconde fois, 'libraryFiles' apparaît dans mon Makefile. Une solution est: QMAKE_POST_LINK mais je n'ai pas aimé ça. – Sebastien247

Répondre

0

Utilisez QMAKE_POST_LINK a résolu mon problème:

message(Building...) 

QT   += widgets designer 

PLUGIN_CLASS_NAME = QKWidgets 

QTDIR_build { 
    message(Qt Build) 
    # This is only for the Qt build. Do not use externally. We mean it. 
    PLUGIN_TYPE = designer 
    load(qt_plugin) 
    CONFIG += install_ok 
} else { 
    message(Public Build) 
    # Public example: 

    TARGET  = $$qtLibraryTarget($$TARGET) 
    CONFIG  += plugin debug_and_release 
    TEMPLATE = lib 

    target.path = $$[QT_INSTALL_PLUGINS]/designer 
    INSTALLS += target # headersDataFiles libraryFiles 


    headersDataFiles.path = $$[QT_INSTALL_HEADERS]/$$PLUGIN_CLASS_NAME/ 
    headersDataFiles.files = $$PWD/*.h 

    libraryFiles.path = $$[QT_INSTALL_LIBS] 
    CONFIG(debug, debug|release): libraryFiles.files = $$OUT_PWD/debug/*.lib $$OUT_PWD/debug/*.pdb 
    CONFIG(release, debug|release): libraryFiles.files = $$OUT_PWD/release/*.lib 

    win32 { 
     # Copy *.lib 
     DESTDIR_WIN = $$libraryFiles.path 
     DESTDIR_WIN ~= s,/,\\,g 
     FILES = $$libraryFiles.files 
     FILES ~= s,/,\\,g 

     for(FILE, FILES){ 
      QMAKE_POST_LINK += $$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN}$$escape_expand(\\n\\t)) 
     } 

     # Copy *.h 
     DESTDIR_WIN = $$headersDataFiles.path 
     DESTDIR_WIN ~= s,/,\\,g 
     FILES = $$headersDataFiles.files 
     FILES ~= s,/,\\,g 

     for(FILE, FILES){ 
      QMAKE_POST_LINK += $$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN}$$escape_expand(\\n\\t)) 
     } 
    } 
}