diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h index 071eefbb67..c82d178bef 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h @@ -222,6 +222,11 @@ public: return String ("$(JUCE_OUTDIR)/$(JUCE_TARGET_") + getTargetVarName() + String (")"); } + String getPhonyName() const + { + return String (getName()).upToFirstOccurrenceOf (" ", false, false); + } + void writeTargetLine (OutputStream& out, const bool useLinuxPackages) { jassert (type != AggregateTarget); @@ -522,6 +527,8 @@ private: if (target->type == ProjectType::Target::AggregateTarget) { StringArray dependencies; + MemoryOutputStream subTargetLines; + for (int j = 0; j < n; ++j) { if (i == j) continue; @@ -529,14 +536,25 @@ private: if (MakefileTarget* dependency = targets.getUnchecked (j)) { if (dependency->type != ProjectType::Target::SharedCodeTarget) - dependencies.add (dependency->getBuildProduct()); + { + auto phonyName = dependency->getPhonyName(); + + subTargetLines << phonyName << " : " << dependency->getBuildProduct() << newLine; + dependencies.add (phonyName); + } } } out << "all : " << dependencies.joinIntoString (" ") << newLine << newLine; + out << subTargetLines.toString() << newLine << newLine; } else + { + if (! getProject().getProjectType().isAudioPlugin()) + out << "all : " << target->getBuildProduct() << newLine << newLine; + target->writeTargetLine (out, useLinuxPackages); + } } } } @@ -661,8 +679,7 @@ private: for (auto target : targets) target->writeObjects (out); - out << ".PHONY: clean all" << newLine - << newLine; + out << getPhonyTargetLine() << newLine << newLine; StringArray packages; packages.addTokens (getExtraPkgConfigString(), " ", "\"'"); @@ -720,6 +737,23 @@ private: + "_" + String::toHexString (file.toUnixStyle().hashCode()) + ".o"; } + String getPhonyTargetLine() const + { + MemoryOutputStream phonyTargetLine; + + phonyTargetLine << ".PHONY: clean all"; + + if (! getProject().getProjectType().isAudioPlugin()) + return phonyTargetLine.toString(); + + for (auto target : targets) + if (target->type != ProjectType::Target::SharedCodeTarget + && target->type != ProjectType::Target::AggregateTarget) + phonyTargetLine << " " << target->getPhonyName(); + + return phonyTargetLine.toString(); + } + void initialiseDependencyPathValues() { vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder),