Что я делаю не так?
Qmake делает различие между "replace" -функциями (т. Е. Возвращает строку, например, подстановку переменной в make; обычно используется в правой части присваивания ) и «тестовые» -функции (возвращающие логическое значение, подходящее для условного оператора).
myFunction(cont, file)
- это вызов тестовой функции; $$myFunction(cont, file)
- это вызов функции замены.
Также обратите внимание, что файл Qmake в основном состоит из назначений и условий. Следовательно, myFunction(cont, file)
интерпретируется как
myFunction(cont, file) {
# nothing
} else {
# nothing
}
Другая проблема заключается в том, что функции в Qmake работают с собственной частной копией переменных, поэтому вы должны использовать export()
, чтобы сделать ваши изменения видимыми снаружи. Следовательно, имеем:
# replace function example code
defineReplace(myFunction) {
HEADERS *= ./inc/$$1/$${2}.h
SOURCES *= ./src/$$1/$${2}.cpp
export(HEADERS)
export(SOURCES)
# warning: conditional must expand to exactly one word
#return()
# warning: conditional must expand to exactly one word
#return(foo bar)
# ok: any word will do as we don't care for true/false evaluation
return(baz)
}
# test function example code
defineTest(myFunction) {
HEADERS *= ./inc/$$1/$${2}.h
SOURCES *= ./src/$$1/$${2}.cpp
export(HEADERS)
export(SOURCES)
# warning: unexpected return value
#return(foo)
# ok: returns true
#return(true)
# ok: also returns true
#return()
# ...or simply return true by default
}
# calling replace function
$$myFunction(cont, file)
# calling test function
myFunction(cont, file)