在我的C ++ / Qt5项目中,我有一些外部文件(PNG等),我需要在构建时复制可执行文件旁边。到目前为止,我找不到用qmake实现这一目标的好方法。
几年前我问过这个问题的一个较轻的变种,但我在互联网上找到的所有内容和所有内容对我来说都是不完整的。它必须在以下每个条件下工作:qmake foo.pro && make && ./foo
(在Linux上)make install
我目前拥有的只是技术性和破碎性。必须有比我更轻巧,更好的工作吗?
这是一个精简版本,描述了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
也不会工作(但是;未经测试)。
请帮助;)我真的必须为所有这些添加修复程序,还是有不同的方法?
答案 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)