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

时间:2016-07-07 19:19:00

标签: qt qmake

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

几年前我问过这个问题的一个较轻的变种,但我在互联网上找到的所有内容和所有内容对我来说都是不完整的。它必须在以下每个条件下工作:

  • 有人选择我的源代码并只调用qmake foo.pro && make && ./foo(在Linux上)
  • 如上所述,但之后她也会致电make install
  • 和第一个一样,但是使用Windows(忘记Qt DLL或其他外部内容 - 我只问我自己的文件)
  • 有人选择我的源代码,在QtCreator中打开它,只需点击Play(在任何操作系统上 - 但是,嗯,至少可以说是Linux和Windows)

我目前拥有的只是技术性和破碎性。必须有比我更轻巧,更好的工作吗?

这是一个精简版本,描述了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_PWD不是真正的目标,但是OUT_PWD/debug/release是)。我怀疑,make install也不会工作(但是;未经测试)。

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

1 个答案:

答案 0 :(得分:0)

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

QMAKE_PRE_LINK += someShellCommand $$system_quote($$shell_quote(somePath)) $$escape_expand(\\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_POST_LINK += someShellCommand $$system_quote($$shell_quote(somePath)) $$escape_expand(\\n\\t)