4

在我基于 qmake 的项目中,我想在编译之前对某些文件运行“xxd”。按照文档,我的 pro 文件中的相关部分如下所示:

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 的帮助下,这就是我在 pro 文件中修复该部分的方式:

# 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
4

1 回答 1

5

.input属性需要变量的名称,而不是文件列表。尝试拿走$$并使用xxd.input = SHADERS.

.depends,另一方面,需要一个文件列表,所以使用xxd.depends = $$SHADERS.

如果设置.variable_outHEADERSSOURCESOBJECTS,编译器将运行。但是,如果您设置.variable_out为另一个变量名,则还必须设置.CONFIG = target_predeps才能使编译器运行。

于 2013-01-10T16:42:43.717 回答