Qmake 在构建时复制多个文件

问题描述 投票:0回答:2

我的 Qmake 项目中有一个文件列表。我希望它们在构建时复制到构建目录中。

我的qmake文件如下

OTHER_FILES += \
    input1 \
    input2 \
    input3 \

我使用的是Linux。我读过一些堆栈溢出问题并用谷歌搜索了我的问题,但找不到确切的解决方案。

c++ qmake
2个回答
3
投票

可以使用

for()
循环来完成。您可能需要调整
BUILD_DIR
变量。 “其他”文件取自当前目录。

OTHER_FILES += \
    input1 \
    input2 \
    input3 \

BUILD_DIR = build

for(file, OTHER_FILES) {
    eval($${file}.depends = $$file)
    eval($${file}.target = $$BUILD_DIR/$$file)
    eval($${file}.commands = cp $$file $$BUILD_DIR/)

    QMAKE_EXTRA_TARGETS += $${file}
    PRE_TARGETDEPS += $$BUILD_DIR/$$file
}

0
投票

我需要将 openssl 1.1 dll(libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll)复制到构建目录中以便进行网络通信。我在带有 gcc 7.3.0 编译器的 Windows 11 64 位机器上使用 Qt 5.13.0。我的项目结构是, |项目根| D:\Qt\MyProject | | ------------ | --------------- | |项目文件| D:\Qt\MyProject\MyProject.pro | |调试构建 | D:\Qt\MyProject\调试 | |发布构建| D:\Qt\我的项目 释放 | |要复制的文件| D:\Qt\MyProject\library | 我尝试了多种解决方案,但只有以下代码片段对我有用。

win32 {
CONFIG( debug, debug|release ) {
    DEST_DIR = debug          # debug
}
else {
    DEST_DIR = release        # release
}
}
TARGET_DIR = $${OUT_PWD}/$${DEST_DIR}
# List of files to be copied to target directory
FILELIST  = "library/libcrypto-1_1-x64.dll"       # ssl 1.1.x (qt>=5.12.4)
FILELIST += "library/libssl-1_1-x64.dll"
win32:TARGET_DIR ~= s,/,\\,g
for(FILE, FILELIST) {
    win32:FILE ~= s,/,\\,g
    $$basename(FILE).depends = $$shell_quote($$FILE)
    $$basename(FILE).target = $${TARGET_DIR}/$$basename(FILE)
    $$basename(FILE).commands = $(COPY_FILE) $$shell_quote($$FILE) $$shell_quote($${TARGET_DIR})
    QMAKE_EXTRA_TARGETS += $$basename(FILE)
    PRE_TARGETDEPS += $${TARGET_DIR}/$$basename(FILE)
}

在上述情况下,对于调试构建,QMake 在 Makefile 中生成两个规则,

D:/Qt/MyProject/debug/libcrypto-1_1-x64.dll: library/libcrypto-1_1-x64.dll
    $(COPY_FILE) library\libcrypto-1_1-x64.dll D:\Qt\MyProject\debug

D:/Qt/MyProject/debug/libssl-1_1-x64.dll: library/libssl-1_1-x64.dll
    $(COPY_FILE) library\libssl-1_1-x64.dll D:\Qt\MyProject\debug

这可确保仅当库目录中的文件更新时才会复制文件。

参考资料:

  1. Qt5 - 在构建时复制附加文件 - 在许多情况下都必须工作
  2. QMake - 如何将文件复制到输出
  3. 使用Qt编译项目后将文件复制到build目录
  4. https://forum.qt.io/topic/124864/how-to-copy-a-folder-from-source-to-build-directory-in-qmake/3
  5. https://www.toptal.com/qt/vital-guide-qmake
  6. https://web.archive.org/web/20210620205822/http://blog.mgsxx.com/?p=2201
  7. https://www.reddit.com/r/QtFramework/comments/mpjl9z/copying_data_files_to_the_build_directory_with/
  8. https://dragly.org/2013/11/05/copying-data-files-to-the-build-directory-when-working-with-qmake/
© www.soinside.com 2019 - 2024. All rights reserved.