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

Anc*_*rio 5 compiler-construction qmake extra xxd

在我基于 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

smo*_*ris 6

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

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

如果设置.variable_outHEADERSSOURCES、 或OBJECTS,编译器将运行。但是,如果设置.variable_out为其他变量名称,则还必须进行设置.CONFIG = target_predeps才能运行编译器。