/* 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 #include #include #include #include class cmGeneratorTarget; class cmBuildDatabase { public: struct TranslationUnit { std::string WorkDirectory; std::string Source; cm::optional Object; std::vector Requires; std::map Provides; std::vector BaselineArguments; std::vector LocalArguments; std::vector Arguments; bool Private = false; }; struct Set { std::string Name; std::string FamilyName; std::vector VisibleSets; std::vector TranslationUnits; }; cmBuildDatabase(); cmBuildDatabase(cmBuildDatabase const&); ~cmBuildDatabase(); using LookupTable = std::map; // Generate a lookup table for the database. // // Only use when loading a single target's database in order to populate it. LookupTable GenerateLookupTable(); bool HasPlaceholderNames() const; void Write(std::string const& path) const; static std::unique_ptr Load(std::string const& path); static cmBuildDatabase Merge(std::vector const& components); static cmBuildDatabase ForTarget(cmGeneratorTarget* gt, std::string const& config); private: std::vector Sets; };