2016-07-07 18 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

相關問題