Qt5-在构建时复制其他文件-在许多情况下都必须工作

Qt5-在构建时复制其他文件-在许多情况下都必须工作,qt,qmake,Qt,Qmake,在我的C++/Qt5项目中,我有一些外部文件(PNG等),我需要在构建时将它们复制到可执行文件旁边。到目前为止,我没有发现用qmake实现这一点的好方法 几年前,我问了一个较轻的问题,但那里的一切和我在互联网上找到的一切对我来说似乎都不完整。它必须在以下每个条件下工作: 有人选择了我的源代码,只需调用qmakefoo.pro&&make&&foo(在Linux上) 与上面一样,但她也会在之后调用makeinstall 与第一个一样,但使用Windows(忘记Qt DLL或其他外部内容-我只问我

在我的C++/Qt5项目中,我有一些外部文件(PNG等),我需要在构建时将它们复制到可执行文件旁边。到目前为止,我没有发现用qmake实现这一点的好方法

几年前,我问了一个较轻的问题,但那里的一切和我在互联网上找到的一切对我来说似乎都不完整。它必须在以下每个条件下工作:

  • 有人选择了我的源代码,只需调用
    qmakefoo.pro&&make&&foo
    (在Linux上)
  • 与上面一样,但她也会在之后调用
    makeinstall
  • 与第一个一样,但使用Windows(忘记Qt DLL或其他外部内容-我只问我自己的文件)
  • 有人选择了我的源代码,在QtCreator中打开它,然后只需点击Play(在任何操作系统上——但是,嗯,至少在Linux和Windows上)
我现在所拥有的只是一些技术性的东西,还有一些破损的。一定有比我的更轻更有效的东西

这是一个精简的变体,描述my
foo.pro
的功能:

QT += core gui xml widgets
TARGET = foo
TEMPLATE = app
...
EXTRA_BINFILES += logo.png
for(FILE, EXTRA_BINFILES) {
    extrafiles.commands += $$quote($${QMAKE_COPY} $$shell_path($${PWD}/$${FILE}) $$shell_path($${OUT_PWD})$$escape_expand(\n\t))
}
QMAKE_EXTRA_TARGETS += extrafiles
POST_TARGETDEPS += extrafiles
对我来说,这看起来要复杂得多。它在许多方面都有缺陷。例如,如果在第一种情况下失败(因为它试图将文件复制到自身)。热修复程序就位后,它在Windows上再次失败(因为
OUT\u PWD
不是真正的目标,而是
OUT\u PWD/debug
/release
是)。我怀疑,
makeinstall
也不起作用(但是;未经测试)


请帮忙;)我真的必须为所有这些添加修复程序,还是有其他方法?

在PRO文件中开始构建之前使用shell/qmake脚本:

QMAKE\u PRE\u LINK+=someshell命令$$system\quote($$shell\quote(somePath))$$escape\u展开(\\n\\t)

比如说,

win32 { 
QMAKE_PRE_LINK += copy /Y $$system_quote($$shell_quote($${PWD}/../../images/*.png)) $$system_quote($$shell_quote($${PWD}/../build/Output/release/resources)) $$escape_expand(\\n\\t)
}


linux { 
QMAKE_PRE_LINK += cp -r -t -f $$system_quote($$shell_quote($${PWD}/../../images/*.png)) $$system_quote($$shell_quote($${PWD}/../build/Output/release/resources)) $$escape_expand(\\n\\t)
}
在PRO文件的构建时完成时使用shell/qmake脚本:


QMAKE\u POST\u LINK+=someshell命令$$system\quote($$shell\quote(somePath))$$escape\u展开(\\n\\t)

Hi。我不是100%确定,但对我来说,它看起来就像我的一个微妙的不同变体,本质上是一样的。不是吗?我当前的解决方案使用shell命令(尽管它们在跨平台的东西后面有些自负)。但这似乎有点太低级了,无法优雅地涵盖所有典型情况。