Automoc: Add directory-level COMPILE_DEFINITIONS to command line (#14535)
In commit 18412153
(Refactor cmTarget::GetCompileDefinitions...,
2013-06-06) cmQtAutomoc was refactored to get all compile definitions
from the target instead of separately asking the target and querying the
directory-level COMPILE_DEFINITIONS property value. While the
generation process does integrate directory-level COMPILE_DEFINITIONS
into the target definitions, this did not happen until after Automoc
targets are constructed. Therefore the commit regressed use of
directory-level definitions in Automoc targets.
Factor the definition finalization logic out from the
cmGlobalGenerator::CreateGeneratorTargets method into a new
cmGlobalGenerator::FinalizeTargetCompileDefinitions method and call it
before constructing Automoc targets. This will place the
directory-level definitions into the target in time to use them for the
Automoc targets.
Extend the QtAutomoc test to cover this case.
This commit is contained in:
parent
c515dc5748
commit
a1b9465bf8
|
@ -956,6 +956,8 @@ void cmGlobalGenerator::Generate()
|
|||
return;
|
||||
}
|
||||
|
||||
this->FinalizeTargetCompileDefinitions();
|
||||
|
||||
// Iterate through all targets and set up automoc for those which have
|
||||
// the AUTOMOC property set
|
||||
this->CreateAutomocTargets();
|
||||
|
@ -1140,13 +1142,11 @@ void cmGlobalGenerator::CreateAutomocTargets()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmGlobalGenerator::CreateGeneratorTargets()
|
||||
void cmGlobalGenerator::FinalizeTargetCompileDefinitions()
|
||||
{
|
||||
// Construct per-target generator information.
|
||||
for(unsigned int i=0; i < this->LocalGenerators.size(); ++i)
|
||||
{
|
||||
cmGeneratorTargetsType generatorTargets;
|
||||
|
||||
cmMakefile *mf = this->LocalGenerators[i]->GetMakefile();
|
||||
|
||||
const std::vector<cmValueWithOrigin> noconfig_compile_definitions =
|
||||
|
@ -1161,7 +1161,6 @@ void cmGlobalGenerator::CreateGeneratorTargets()
|
|||
{
|
||||
cmTarget* t = &ti->second;
|
||||
|
||||
{
|
||||
for (std::vector<cmValueWithOrigin>::const_iterator it
|
||||
= noconfig_compile_definitions.begin();
|
||||
it != noconfig_compile_definitions.end(); ++it)
|
||||
|
@ -1178,7 +1177,24 @@ void cmGlobalGenerator::CreateGeneratorTargets()
|
|||
mf->GetProperty(defPropName.c_str()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmGlobalGenerator::CreateGeneratorTargets()
|
||||
{
|
||||
// Construct per-target generator information.
|
||||
for(unsigned int i=0; i < this->LocalGenerators.size(); ++i)
|
||||
{
|
||||
cmGeneratorTargetsType generatorTargets;
|
||||
|
||||
cmMakefile *mf = this->LocalGenerators[i]->GetMakefile();
|
||||
|
||||
cmTargets& targets = mf->GetTargets();
|
||||
for(cmTargets::iterator ti = targets.begin();
|
||||
ti != targets.end(); ++ti)
|
||||
{
|
||||
cmTarget* t = &ti->second;
|
||||
cmGeneratorTarget* gt = new cmGeneratorTarget(t);
|
||||
this->GeneratorTargets[t] = gt;
|
||||
this->ComputeTargetObjects(gt);
|
||||
|
|
|
@ -382,6 +382,7 @@ private:
|
|||
|
||||
void WriteSummary();
|
||||
void WriteSummary(cmTarget* target);
|
||||
void FinalizeTargetCompileDefinitions();
|
||||
|
||||
cmExternalMakefileProjectGenerator* ExtraGenerator;
|
||||
|
||||
|
|
|
@ -16,7 +16,10 @@
|
|||
|
||||
#include <QObject>
|
||||
|
||||
class Foo : public QObject
|
||||
class Foo
|
||||
#ifdef FOO
|
||||
: public QObject
|
||||
#endif
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue