【发布时间】:2016-10-03 13:18:54
【问题描述】:
我知道我们有QMAKE_EXTRA_TARGETS 来创建新的makefile 目标,其使用如下(如http://blog.qt.io/blog/2008/04/16/the-power-of-qmake/ 所示):
conv.target=convert
conv.input=file.in
conv.output=file.out
conv.commands=convert.sh file.in file.out
QMAKE_EXTRA_TARGETS+=conv
在我的例子中,convert.sh 用于多个文件和目标。我想创建一个带有参数(target_name、input_file、output_file)的方法,为我创建任务,这样我就不必重复上面的行了。
qmake 上的文档非常缺乏,或者我没有找到正确的来源,但据我了解,qmake 中有两种类型的函数:替换和测试(http://doc.qt.io/qt-5/qmake-language.html#replace-functions),我们可以使用创建自定义函数defineReplace 和 defineTest。
我试过了:
defineTest(createConvertTask) {
custom.target = $$1
custom.input = $$2
custom.output = $$3
custom.commands = convert.sh $$2 > $$3
QMAKE_EXTRA_TARGETS += custom
}
但这并没有真正起作用,因为在多次调用createConvertTask 之后,QMAKE_EXTRA_TARGETS 将只包含字符串custom 的多个副本。
但是,这个
defineTest(createConvertTask) {
$$1.target = $$1
$$1.input = $$2
$$1.output = $$3
$$1.commands = convert.sh $$2 > $$3
QMAKE_EXTRA_TARGETS += $$1
}
失败并出现错误example.pro:2: error: Left hand side of assignment must expand to exactly one word.
关于如何解决这个问题的任何想法?
【问题讨论】: