2016-07-07 51 views
3

在我的C++/QT5项目工作,我有一些外部文件(PNG图像等),我需要在编译时可执行旁边有抄袭。到目前为止,我没有发现用qmake来实现这一目标的好方法。QT5 - 复制其他文件上生成时间 - 必须在许多情况下

我年前问这个问题的一个打火机变种,但那里的一切,一切我在网上查到似乎不完整的我。它必须在每个下列条件下工作:

  • 有人拿起我的源代码,只是调用qmake foo.pro && make && ./foo(在Linux上)
  • 和上面一样,但她也呼吁make install事后
  • 像第一个,但视窗(忘了Qt的DLL或其他外部的东西 - 我只是问我自己的文件)
  • 有人拿起我的源代码,打开它在QtCreator,只是点击播放(在任何操作系统 - 但是,EHMM,可以说,至少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也不会工作(但;未经测试)。

请帮助;)我真的必须添加修复这一切,还是有不同的做法?

回答

0

使用shell/QMAKE脚本生成您的PRO文件开始之前:

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使用在编译时完成壳/ QMAKE脚本文件:

QMAKE_POST_LINK += someShellCommand $$system_quote($$shell_quote(somePath)) $$escape_expand(\\n\\t)

+0

嗨。我不是100%肯定的,但对我来说,它看起来就像我的一个微妙不同的变体,它基本上是一样的。不是吗?我目前的解决方案使用了shell命令(尽管它们有点隐藏在跨平台的东西之后)。但是这对于优雅地涵盖所有典型的情况来说似乎有些过于低级。 – ginger

相关问题