Compiler construction qmake:额外的编译器(处理步骤)?

Compiler construction qmake:额外的编译器(处理步骤)?,compiler-construction,qmake,extra,xxd,Compiler Construction,Qmake,Extra,Xxd,在我基于qmake的项目中,我想在编译之前对一些文件运行'xxd'。根据文档,my 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}

在我基于qmake的项目中,我想在编译之前对一些文件运行'xxd'。根据文档,my 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

.input
属性需要变量名,而不是文件列表。尝试删除
$
,只需使用
xxd.input=SHADERS

另一方面,
.dependens
需要一个文件列表,因此使用
xxd.dependens=$$SHADERS


如果将
.variable\u out
设置为
标题
对象
,编译器将运行。但是,如果您将
.variable\u out
设置为另一个变量名,则还必须设置
.CONFIG=target\u predeps
,编译器才能运行。

很高兴您能使用它。我刚刚弄清楚了我对
.variable\u out
的困惑,并澄清了我的答案。以防其他人看到这个问题而无法解决:我必须将
${QMAKE\u FILE\u NAME}.xxd
(在我的代码中它的调用方式不同)添加到.depends列表中。所以对我来说是
xxd.dependens=SHADERS$$${QMAKE\u FILE\u NAME}.xxd
。如果没有它,着色器编译器在重新构建的情况下不会执行,
$${QMAKE_FILE_NAME}.xxd
从未创建过。