2013-01-10 29 views
2

在我的基於qmake的項目中,我想在編譯之前在某些文件上運行'xxd'。下面的文件,在我的親文件中的相關部分看起來如下:qmake:額外的編譯器(處理步驟)?

SHADERS = shader/tone.frag \ 
      shader/trans.frag \ 
      shader/hue.frag 

# xxd 
xxd.output = ${QMAKE_FILE_NAME}.xxd 
xxd.commands = xxd -i ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT} 
xxd.depends = SHADERS 
xxd.input = $$SHADERS 
xxd.variable_out = HEADERS 

QMAKE_EXTRA_COMPILERS += xxd 

QMAKE不抱怨,但它也不會運行XXD可言。我是否必須爲每個我想要預處理的文件創建特殊目標? (所得的* .xxd文件將在事後由我編寫,僅包含在其他cpp文件)

編輯:隨着smokris的幫助,這就是我在我的親文件固定部分:

# xxd 
xxd.output = ${QMAKE_FILE_NAME}.xxd 
xxd.commands = xxd -i ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT} 
xxd.depends = $$SHADERS 
xxd.input = SHADERS 
xxd.variable_out = HEADERS 
+0

很高興你的工作。我剛剛弄清楚了關於'.variable_out'的混淆,並澄清了我的答案。 – smokris

+0

爲了防止其他人查看此內容並且無法使其工作:我必須在.depends列表中添加'$$ {QMAKE_FILE_NAME} .xxd'(在我的代碼中調用的方式不同)。所以對我來說,它是'xxd.depends = SHADERS $$ {QMAKE_FILE_NAME} .xxd'。沒有它,着色器編譯器在重新構建的情況下不執行,並且從未創建「$$ {QMAKE_FILE_NAME} .xxd」。 – rsp1984

回答

3

.input屬性需要變量的名稱,而不是文件列表。嘗試拿走$$並只使用xxd.input = SHADERS

.depends另一方面,預計文件列表,所以使用xxd.depends = $$SHADERS

如果將.variable_out設置爲HEADERS,SOURCESOBJECTS,編譯器將運行。但是,如果將.variable_out設置爲另一個變量名稱,則還必須設置.CONFIG = target_predeps以便編譯器運行。