DEPLOYMENTFOLDERS - can i use in Qt 5.5.1 ?



  • I have a Qt 5.2.1 project with DEPLOYMENTFOLDERS macro in .pro file, and also .pri file had scripts corresponding to it.

    .pro file

    folder_01.source = qml
    folder_01.target = /
    
    folder_02.source = images
    folder_02.target = /
    
    DEPLOYMENTFOLDERS = folder_01 folder_02
    
    TEMPLATE = app
    
    QT += qml quick
    CONFIG += c++11
    
    SOURCES += main.cpp
    
    RESOURCES +=
    
    # Additional import path used to resolve QML modules in Qt Creator's code model
    QML_IMPORT_PATH =
    
    # Default rules for deployment.
    include(deployment.pri)
    qtcAddDeployment()
    
    

    .pri file

    defineTest(qtcAddDeployment) {
    for(deploymentfolder, DEPLOYMENTFOLDERS) {
        item = item$${deploymentfolder}
        greaterThan(QT_MAJOR_VERSION, 4) {
            itemsources = $${item}.files
        } else {
            itemsources = $${item}.sources
        }
        $$itemsources = $$eval($${deploymentfolder}.source)
        itempath = $${item}.path
        $$itempath= $$eval($${deploymentfolder}.target)
        export($$itemsources)
        export($$itempath)
        DEPLOYMENT += $$item
    }
    
    MAINPROFILEPWD = $$PWD
    
    android-no-sdk {
        for(deploymentfolder, DEPLOYMENTFOLDERS) {
            item = item$${deploymentfolder}
            itemfiles = $${item}.files
            $$itemfiles = $$eval($${deploymentfolder}.source)
            itempath = $${item}.path
            $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)
            export($$itemfiles)
            export($$itempath)
            INSTALLS += $$item
        }
    
        target.path = /data/user/qt
    
        export(target.path)
        INSTALLS += target
    } else:android {
        for(deploymentfolder, DEPLOYMENTFOLDERS) {
            item = item$${deploymentfolder}
            itemfiles = $${item}.files
            $$itemfiles = $$eval($${deploymentfolder}.source)
            itempath = $${item}.path
            $$itempath = /assets/$$eval($${deploymentfolder}.target)
            export($$itemfiles)
            export($$itempath)
            INSTALLS += $$item
        }
    
        x86 {
            target.path = /libs/x86
        } else: armeabi-v7a {
            target.path = /libs/armeabi-v7a
        } else {
            target.path = /libs/armeabi
        }
    
        export(target.path)
        INSTALLS += target
    } else:win32 {
        copyCommand =
        for(deploymentfolder, DEPLOYMENTFOLDERS) {
            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
            source = $$replace(source, /, \\)
            sourcePathSegments = $$split(source, \\)
            target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)
            target = $$replace(target, /, \\)
            target ~= s,\\\\\\.?\\\\,\\,
            !isEqual(source,$$target) {
                !isEmpty(copyCommand):copyCommand += &&
                isEqual(QMAKE_DIR_SEP, \\) {
                    copyCommand += $(COPY_DIR) \"$$source\" \"$$target\"
                } else {
                    source = $$replace(source, \\\\, /)
                    target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
                    target = $$replace(target, \\\\, /)
                    copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\"
                }
            }
        }
        !isEmpty(copyCommand) {
            copyCommand = @echo Copying application data... && $$copyCommand
            copydeploymentfolders.commands = $$copyCommand
            first.depends = $(first) copydeploymentfolders
            export(first.depends)
            export(copydeploymentfolders.commands)
            QMAKE_EXTRA_TARGETS += first copydeploymentfolders
        }
    } else:ios {
        copyCommand =
        for(deploymentfolder, DEPLOYMENTFOLDERS) {
            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
            source = $$replace(source, \\\\, /)
            target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)
            target = $$replace(target, \\\\, /)
            sourcePathSegments = $$split(source, /)
            targetFullPath = $$target/$$last(sourcePathSegments)
            targetFullPath ~= s,/\\.?/,/,
            !isEqual(source,$$targetFullPath) {
                !isEmpty(copyCommand):copyCommand += &&
                copyCommand += mkdir -p \"$$target\"
                copyCommand += && cp -r \"$$source\" \"$$target\"
            }
        }
        !isEmpty(copyCommand) {
            copyCommand = echo Copying application data... && $$copyCommand
            !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += ";"
            QMAKE_POST_LINK += "$$copyCommand"
            export(QMAKE_POST_LINK)
        }
    } else:unix {
        maemo5 {
            desktopfile.files = $${TARGET}.desktop
            desktopfile.path = /usr/share/applications/hildon
            icon.files = $${TARGET}64.png
            icon.path = /usr/share/icons/hicolor/64x64/apps
        } else:!isEmpty(MEEGO_VERSION_MAJOR) {
            desktopfile.files = $${TARGET}_harmattan.desktop
            desktopfile.path = /usr/share/applications
            icon.files = $${TARGET}80.png
            icon.path = /usr/share/icons/hicolor/80x80/apps
        } else { # Assumed to be a Desktop Unix
            copyCommand =
            for(deploymentfolder, DEPLOYMENTFOLDERS) {
                source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
                source = $$replace(source, \\\\, /)
                macx {
                    target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
                } else {
                    target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
                }
                target = $$replace(target, \\\\, /)
                sourcePathSegments = $$split(source, /)
                targetFullPath = $$target/$$last(sourcePathSegments)
                targetFullPath ~= s,/\\.?/,/,
                !isEqual(source,$$targetFullPath) {
                    !isEmpty(copyCommand):copyCommand += &&
                    copyCommand += $(MKDIR) \"$$target\"
                    copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\"
                }
            }
            !isEmpty(copyCommand) {
                copyCommand = @echo Copying application data... && $$copyCommand
                copydeploymentfolders.commands = $$copyCommand
                first.depends = $(first) copydeploymentfolders
                export(first.depends)
                export(copydeploymentfolders.commands)
                QMAKE_EXTRA_TARGETS += first copydeploymentfolders
            }
        }
        !isEmpty(target.path) {
            installPrefix = $${target.path}
        } else {
            installPrefix = /opt/$${TARGET}
        }
        for(deploymentfolder, DEPLOYMENTFOLDERS) {
            item = item$${deploymentfolder}
            itemfiles = $${item}.files
            $$itemfiles = $$eval($${deploymentfolder}.source)
            itempath = $${item}.path
            $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
            export($$itemfiles)
            export($$itempath)
            INSTALLS += $$item
        }
    
        !isEmpty(desktopfile.path) {
            export(icon.files)
            export(icon.path)
            export(desktopfile.files)
            export(desktopfile.path)
            INSTALLS += icon desktopfile
        }
    
        isEmpty(target.path) {
            target.path = $${installPrefix}/bin
            export(target.path)
        }
        INSTALLS += target
    }
    
    export (ICON)
    export (INSTALLS)
    export (DEPLOYMENT)
    export (LIBS)
    export (QMAKE_EXTRA_TARGETS)
    }
    
    

    This helped me not to add all qml and images in exe and be separate but along with the package.

    But when I create new project in Qt 5.5.1, this doesn't gets created in .pro or .pri files. Instead the qml file is added to the resource file in the project. This makes difficulty as we often changes the qml files for ui changes (because to take effect the changes in qml file we need to remove it from resource file and add again).

    Is there an alternative to add qml files in resource file or can i copy paste .pro and .pri from 5.2.1 version to 5.5 version?


  • Moderators

    You can copy-paste, it should still work.



  • @sierdzio : I tried it and works fine in windows.
    But for android I get the below error:

    W/libSmart_Drive.so(  763): (null):0 ((null)): QQmlApplicationEngine failed to load component
    W/libSmart_Drive.so(  763): (null):0 ((null)): file:///data/data/org.qtproject.example.Smart_Drive/files/qml/main.qml:-1 File not found
    W/libSmart_Drive.so(  763):
    
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.