qmake: Allow extra compilers to have the makefile depend on its inputs
And enable this configuration option for the resource compiler. This results in a re-run of qmake whenever you touch a qrc file, which is needed to keep the dependencies up to date. Otherwise you might end up in the situation where you add a file to a qrc, edit the file some time later, but a rebuild does not regenerate a cpp file and compile that, so the final binary is stale. Technically this dependency problem is present for all source files, and qrc files are no different than any cpp file that you add a new header #include to, or adding a Q_OBJECT macro to a header. To pick up these changes we have to re-run qmake, so that qmake can run its internal dependency checking, and any extra compiler dependency commands. The reason we're making this change for rcc files it that conceptually people treat them as a "project" files, and expect them to behave similarly to .pro or .pri files, in that editing the file will invalidate the makefile. In practice this is often what happens when adding new headers, as you touch the project file when changing the HEADERS variable. Task-number: QTBUG-13334 Change-Id: If69149678e7fba6d812d31dcc17877427f9a6122 Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com> Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
This commit is contained in:
parent
ab79c7c092
commit
ca572a6144
@ -22,6 +22,7 @@ resource_combine {
|
||||
}
|
||||
rcc.commands = "$$QMAKE_RCC" $$QMAKE_RESOURCE_FLAGS "${QMAKE_FILE_IN}" -o "${QMAKE_FILE_OUT}"
|
||||
rcc.depend_command = "$$QMAKE_RCC" -list $$QMAKE_RESOURCE_FLAGS "${QMAKE_FILE_IN}"
|
||||
rcc.CONFIG += add_inputs_as_makefile_deps
|
||||
rcc.input = RESOURCES
|
||||
rcc.variable_out = SOURCES
|
||||
rcc.name = RCC ${QMAKE_FILE_IN}
|
||||
|
@ -604,6 +604,8 @@ MakefileGenerator::init()
|
||||
compiler.flags |= Compiler::CompilerRemoveNoExist;
|
||||
if(v[(*it) + ".CONFIG"].indexOf("no_dependencies") != -1)
|
||||
compiler.flags |= Compiler::CompilerNoCheckDeps;
|
||||
if(v[(*it) + ".CONFIG"].indexOf("add_inputs_as_makefile_deps") != -1)
|
||||
compiler.flags |= Compiler::CompilerAddInputsAsMakefileDeps;
|
||||
|
||||
QString dep_type;
|
||||
if(!project->isEmpty((*it) + ".dependency_type"))
|
||||
@ -766,9 +768,18 @@ MakefileGenerator::init()
|
||||
//add to dependency engine
|
||||
for(x = 0; x < compilers.count(); ++x) {
|
||||
const MakefileGenerator::Compiler &comp = compilers.at(x);
|
||||
if(!(comp.flags & Compiler::CompilerNoCheckDeps))
|
||||
if(!(comp.flags & Compiler::CompilerNoCheckDeps)) {
|
||||
addSourceFiles(v[comp.variable_in], QMakeSourceFileInfo::SEEK_DEPS,
|
||||
(QMakeSourceFileInfo::SourceFileType)comp.type);
|
||||
|
||||
if (comp.flags & Compiler::CompilerAddInputsAsMakefileDeps) {
|
||||
QStringList &l = v[comp.variable_in];
|
||||
for (int i=0; i < l.size(); ++i) {
|
||||
if(v["QMAKE_INTERNAL_INCLUDED_FILES"].indexOf(l.at(i)) == -1)
|
||||
v["QMAKE_INTERNAL_INCLUDED_FILES"].append(l.at(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -159,10 +159,11 @@ protected:
|
||||
{
|
||||
QString variable_in;
|
||||
enum CompilerFlag {
|
||||
CompilerNoFlags = 0x00,
|
||||
CompilerBuiltin = 0x01,
|
||||
CompilerNoCheckDeps = 0x02,
|
||||
CompilerRemoveNoExist = 0x04
|
||||
CompilerNoFlags = 0x00,
|
||||
CompilerBuiltin = 0x01,
|
||||
CompilerNoCheckDeps = 0x02,
|
||||
CompilerRemoveNoExist = 0x04,
|
||||
CompilerAddInputsAsMakefileDeps = 0x08
|
||||
};
|
||||
uint flags, type;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user