/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include <map> #include <string> #include <vector> #include "cmGlobalGenerator.h" class cmake; class cmGeneratorTarget; class cmLocalGenerator; /** \class cmGlobalCommonGenerator * \brief Common infrastructure for Makefile and Ninja global generators. */ class cmGlobalCommonGenerator : public cmGlobalGenerator { public: cmGlobalCommonGenerator(cmake* cm); ~cmGlobalCommonGenerator() override; struct DirectoryTarget { cmLocalGenerator* LG = nullptr; struct Target { cmGeneratorTarget const* GT = nullptr; std::vector<std::string> ExcludedFromAllInConfigs; }; std::vector<Target> Targets; struct Dir { std::string Path; bool ExcludeFromAll = false; }; std::vector<Dir> Children; }; std::map<std::string, DirectoryTarget> ComputeDirectoryTargets() const; bool IsExcludedFromAllInConfig(const DirectoryTarget::Target& t, const std::string& config); };