cmStandardLevelResolver.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include <string>
  5. #include "cmValue.h"
  6. class cmMakefile;
  7. class cmGeneratorTarget;
  8. class cmTarget;
  9. class cmStandardLevelResolver
  10. {
  11. public:
  12. explicit cmStandardLevelResolver(cmMakefile* makefile)
  13. : Makefile(makefile)
  14. {
  15. }
  16. std::string GetCompileOptionDef(cmGeneratorTarget const* target,
  17. std::string const& lang,
  18. std::string const& config) const;
  19. std::string GetEffectiveStandard(cmGeneratorTarget const* target,
  20. std::string const& lang,
  21. std::string const& config) const;
  22. bool AddRequiredTargetFeature(cmTarget* target, const std::string& feature,
  23. std::string* error = nullptr) const;
  24. bool CompileFeatureKnown(const std::string& targetName,
  25. const std::string& feature, std::string& lang,
  26. std::string* error) const;
  27. cmValue CompileFeaturesAvailable(const std::string& lang,
  28. std::string* error) const;
  29. bool GetNewRequiredStandard(const std::string& targetName,
  30. const std::string& feature,
  31. cmValue currentLangStandardValue,
  32. std::string& newRequiredStandard,
  33. std::string* error = nullptr) const;
  34. bool HaveStandardAvailable(cmGeneratorTarget const* target,
  35. std::string const& lang,
  36. std::string const& config,
  37. const std::string& feature) const;
  38. bool IsLaterStandard(std::string const& lang, std::string const& lhs,
  39. std::string const& rhs) const;
  40. private:
  41. bool CheckCompileFeaturesAvailable(const std::string& targetName,
  42. const std::string& feature,
  43. std::string& lang,
  44. std::string* error) const;
  45. cmMakefile* Makefile;
  46. };