-
Bug
-
Resolution: Done
-
P4: Low
-
4.8.5, 5.2.1
-
None
-
Arch Linux x64, make 4.0
-
3f2786e3226ac8b25188fe1b1e6de802996f6720
When using output_function of QMAKE_EXTRA_COMPILERS with absolute paths the Makefile throws an error.
make: *** No rule to make target '../build_qm_test/translations/qm_test_de.qm', needed by 'libqm_test.so.1.0.0'. Stop.
The problem is, that the EXTRA_COMPILER is added as dependency to the TARGET with a relative path.
But the rule for the EXTRA_COMPILER uses the absolute path.
The following project file reproduces the problem.
Just run
lupdate *.pro qmake make
If you remove the line marked with "1", which causes a relative path to be used, no error is thrown and the translations are created.
Using "output" (#2) also works.
TEMPLATE = lib
defineReplace(targetPath) {
win32:1 ~= s|\\\\|/|g
return($$1)
}
LRELEASE = $$targetPath($$[QT_INSTALL_BINS]/lrelease)
TRANSLATIONS = $${TARGET}_de.ts $${TARGET}_en.ts
buildDir = ../build_qm_test/
# 1
buildDir = $$absolute_path($$buildDir)/
message(buildDir: $${buildDir})
defineReplace(generateQmFilename) {
qmFile = $$basename(1)
qmFile = $$replace(qmFile, "\\.ts", ".qm")
return($${buildDir}translations/$${qmFile})
}
updateqm.input = TRANSLATIONS
# 2
#updateqm.output = $${buildDir}translations/${QMAKE_FILE_BASE}.qm
updateqm.output_function = generateQmFilename
isEmpty(vcproj):updateqm.variable_out = PRE_TARGETDEPS
updateqm.commands = $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
updateqm.name = LRELEASE ${QMAKE_FILE_IN}
updateqm.CONFIG += no_link
QMAKE_EXTRA_COMPILERS += updateqm
I wanted to change the name of the generated .qm files, because the project is used with some modifications under different names. Or is there another way to achieve this.
- resulted from
-
QTBUG-700 qmake mixes usage of relative and absolute paths when it comes to build rules and dependencies
-
- Closed
-