QMake - 如何将文件复制到输出

Rap*_*ael 44 qt qmake qt-creator

如何使用qmake将文件从项目复制到输出目录?

我正在Linux上编译,但将来我会在Mac和Windows上编译它.

Jak*_*les 49

您可以使用qmake函数来重用:

# Copies the given files to the destination directory
defineTest(copyToDestdir) {
    files = $$1

    for(FILE, files) {
        DDIR = $$DESTDIR

        # Replace slashes in paths with backslashes for Windows
        win32:FILE ~= s,/,\\,g
        win32:DDIR ~= s,/,\\,g

        QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DDIR) $$escape_expand(\\n\\t)
    }

    export(QMAKE_POST_LINK)
}
Run Code Online (Sandbox Code Playgroud)

然后使用如下:

copyToDestdir($$OTHER_FILES) # a variable containing multiple paths
copyToDestdir(run.sh) # a single filename
copyToDestdir(run.sh README) # multiple files
Run Code Online (Sandbox Code Playgroud)

  • 请注意:我使用`$$ OUT_PWD`而不是`$$ DESTDIR`来使其工作.作为参考,`$$ OUT_PWD`是构建程序的文件夹,`$$ PWD`是程序正在构建的文件夹 - 换句话说就是.pro文件所在的文件夹. (15认同)

sje*_*397 24

以下是我们其中一个项目的示例.它显示了如何将文件复制到DESTDIRWindows和Linux.

linux-g++{
    #...
    EXTRA_BINFILES += \
        $${THIRDPARTY_PATH}/gstreamer-0.10/linux/plugins/libgstrtp.so \
        $${THIRDPARTY_PATH}/gstreamer-0.10/linux/plugins/libgstvideo4linux2.so
    for(FILE,EXTRA_BINFILES){
        QMAKE_POST_LINK += $$quote(cp $${FILE} $${DESTDIR}$$escape_expand(\n\t))
    }
}

win32 {
    #...
    EXTRA_BINFILES += \
        $${THIRDPARTY_PATH}/glib-2.0/win32/bin/libglib-2.0.dll \
        $${THIRDPARTY_PATH}/glib-2.0/win32/bin/libgmodule-2.0.dll
    EXTRA_BINFILES_WIN = $${EXTRA_BINFILES}
    EXTRA_BINFILES_WIN ~= s,/,\\,g
        DESTDIR_WIN = $${DESTDIR}
    DESTDIR_WIN ~= s,/,\\,g
    for(FILE,EXTRA_BINFILES_WIN){
                QMAKE_POST_LINK +=$$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN}$$escape_expand(\n\t))
    }
}
Run Code Online (Sandbox Code Playgroud)


Cal*_*itt 14

如果使用make install,则可以使用qmakeINSTALLS变量.这是一个例子:

images.path    = $${DESTDIR}/images
images.files   += images/splashscreen.png
images.files   += images/logo.png
INSTALLS       += images
Run Code Online (Sandbox Code Playgroud)

然后执行make install.


Okt*_*ist 13

Qt 5.6 将此添加为未记录的功能:

CONFIG += file_copies
Run Code Online (Sandbox Code Playgroud)

创造一个名称来描述您要复制的文件:

COPIES += myDocumentation
Run Code Online (Sandbox Code Playgroud)

在其.files成员中列出要复制的文件:

myDocumentation.files = $$files(text/docs/*.txt)
Run Code Online (Sandbox Code Playgroud)

.path成员中指定目标路径:

myDocumentation.path = $$OUT_PWD/documentation
Run Code Online (Sandbox Code Playgroud)

(可选)指定要从源路径中修剪的基本路径:

myDocumentation.base = $$PWD/text/docs
Run Code Online (Sandbox Code Playgroud)

它基本上可以通过执行与此处许多其他答案相同的操作来工作。有关详细信息,请参见file_copies.prf

介面与的介面非常相似INSTALLS

  • 那一刻,你总是有一辆自行车,但没人告诉你... (2认同)
  • 我不知道为什么找到这个就像大海捞针一样,但省去麻烦并使用这种方法——它应该是公认的答案。 (2认同)