mirror of
https://github.com/Kitware/CMake.git
synced 2026-06-30 19:57:41 +00:00
109 lines
3.1 KiB
C++
109 lines
3.1 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <cm/string_view>
|
|
|
|
#include "cmAlgorithms.h"
|
|
#include "cmFileSetMetadata.h"
|
|
#include "cmListFileCache.h"
|
|
#include "cmPropertyMap.h"
|
|
#include "cmValue.h"
|
|
|
|
class cmMakefile;
|
|
class cmTarget;
|
|
|
|
class cmFileSet
|
|
{
|
|
public:
|
|
cmFileSet(cmMakefile* makefile, cmTarget* target, std::string name,
|
|
std::string type, cm::FileSetMetadata::Visibility visibility);
|
|
|
|
std::string const& GetName() const { return this->Name; }
|
|
std::string const& GetType() const { return this->Type; }
|
|
cm::FileSetMetadata::Visibility GetVisibility() const
|
|
{
|
|
return this->Visibility;
|
|
}
|
|
|
|
cmMakefile* GetMakefile() const { return this->Makefile; }
|
|
|
|
bool IsForSelf() const
|
|
{
|
|
return cm::FileSetMetadata::VisibilityIsForSelf(this->GetVisibility());
|
|
}
|
|
bool IsForInterface() const
|
|
{
|
|
return cm::FileSetMetadata::VisibilityIsForInterface(
|
|
this->GetVisibility());
|
|
}
|
|
bool CanBeIncluded() const
|
|
{
|
|
return this->Type != cm::FileSetMetadata::CXX_MODULES;
|
|
}
|
|
|
|
void CopyEntries(cmFileSet const* fs);
|
|
|
|
void ClearDirectoryEntries();
|
|
void AddDirectoryEntry(BT<std::string> directories);
|
|
std::vector<BT<std::string>> const& GetDirectoryEntries() const
|
|
{
|
|
return this->DirectoryEntries;
|
|
}
|
|
|
|
void ClearFileEntries();
|
|
void AddFileEntry(BT<std::string> files);
|
|
std::vector<BT<std::string>> const& GetFileEntries() const
|
|
{
|
|
return this->FileEntries;
|
|
}
|
|
|
|
// Special properties
|
|
cmBTStringRange GetIncludeDirectories() const;
|
|
cmBTStringRange GetInterfaceIncludeDirectories() const;
|
|
|
|
cmBTStringRange GetCompileOptions() const;
|
|
cmBTStringRange GetInterfaceCompileOptions() const;
|
|
|
|
cmBTStringRange GetCompileDefinitions() const;
|
|
cmBTStringRange GetInterfaceCompileDefinitions() const;
|
|
|
|
//! Set/Get a property of this file set
|
|
void SetProperty(std::string const& prop, cmValue value);
|
|
void SetProperty(std::string const& prop, std::nullptr_t)
|
|
{
|
|
this->SetProperty(prop, cmValue{ nullptr });
|
|
}
|
|
void RemoveProperty(std::string const& prop)
|
|
{
|
|
this->SetProperty(prop, cmValue{ nullptr });
|
|
}
|
|
void SetProperty(std::string const& prop, std::string const& value)
|
|
{
|
|
this->SetProperty(prop, cmValue{ value });
|
|
}
|
|
void AppendProperty(std::string const& prop, std::string const& value,
|
|
bool asString = false);
|
|
cmValue GetProperty(std::string const& prop) const;
|
|
|
|
private:
|
|
cmMakefile* Makefile;
|
|
cmTarget* Target;
|
|
std::string Name;
|
|
std::string Type;
|
|
cm::FileSetMetadata::Visibility Visibility;
|
|
std::vector<BT<std::string>> DirectoryEntries;
|
|
std::vector<BT<std::string>> FileEntries;
|
|
cmPropertyMap Properties;
|
|
std::vector<BT<std::string>> IncludeDirectories;
|
|
std::vector<BT<std::string>> InterfaceIncludeDirectories;
|
|
std::vector<BT<std::string>> CompileOptions;
|
|
std::vector<BT<std::string>> InterfaceCompileOptions;
|
|
std::vector<BT<std::string>> CompileDefinitions;
|
|
std::vector<BT<std::string>> InterfaceCompileDefinitions;
|
|
};
|