mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
cmLocalCommonGenerator: Select work directory semantically
This commit is contained in:
@@ -9,14 +9,17 @@
|
||||
#include "cmMakefile.h"
|
||||
#include "cmOutputConverter.h"
|
||||
#include "cmProperty.h"
|
||||
#include "cmState.h"
|
||||
#include "cmStateDirectory.h"
|
||||
#include "cmStateSnapshot.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
|
||||
class cmGlobalGenerator;
|
||||
|
||||
cmLocalCommonGenerator::cmLocalCommonGenerator(cmGlobalGenerator* gg,
|
||||
cmMakefile* mf, std::string wd)
|
||||
cmMakefile* mf, WorkDir wd)
|
||||
: cmLocalGenerator(gg, mf)
|
||||
, WorkingDirectory(std::move(wd))
|
||||
, WorkingDirectory(wd)
|
||||
{
|
||||
this->ConfigNames =
|
||||
this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
|
||||
@@ -24,10 +27,21 @@ cmLocalCommonGenerator::cmLocalCommonGenerator(cmGlobalGenerator* gg,
|
||||
|
||||
cmLocalCommonGenerator::~cmLocalCommonGenerator() = default;
|
||||
|
||||
std::string const& cmLocalCommonGenerator::GetWorkingDirectory() const
|
||||
{
|
||||
if (this->WorkingDirectory == WorkDir::TopBin) {
|
||||
return this->GetState()->GetBinaryDirectory();
|
||||
}
|
||||
return this->StateSnapshot.GetDirectory().GetCurrentBinary();
|
||||
}
|
||||
|
||||
std::string cmLocalCommonGenerator::MaybeRelativeToWorkDir(
|
||||
std::string const& path) const
|
||||
{
|
||||
return this->MaybeRelativeTo(this->WorkingDirectory, path);
|
||||
if (this->WorkingDirectory == WorkDir::TopBin) {
|
||||
return this->MaybeRelativeToTopBinDir(path);
|
||||
}
|
||||
return this->MaybeRelativeToCurBinDir(path);
|
||||
}
|
||||
|
||||
std::string cmLocalCommonGenerator::GetTargetFortranFlags(
|
||||
@@ -41,7 +55,7 @@ std::string cmLocalCommonGenerator::GetTargetFortranFlags(
|
||||
|
||||
// Add a module output directory flag if necessary.
|
||||
std::string mod_dir =
|
||||
target->GetFortranModuleDirectory(this->WorkingDirectory);
|
||||
target->GetFortranModuleDirectory(this->GetWorkingDirectory());
|
||||
if (!mod_dir.empty()) {
|
||||
mod_dir = this->ConvertToOutputFormat(
|
||||
this->MaybeRelativeToWorkDir(mod_dir), cmOutputConverter::SHELL);
|
||||
|
@@ -20,9 +20,15 @@ class cmSourceFile;
|
||||
*/
|
||||
class cmLocalCommonGenerator : public cmLocalGenerator
|
||||
{
|
||||
protected:
|
||||
enum class WorkDir
|
||||
{
|
||||
TopBin,
|
||||
CurBin,
|
||||
};
|
||||
|
||||
public:
|
||||
cmLocalCommonGenerator(cmGlobalGenerator* gg, cmMakefile* mf,
|
||||
std::string wd);
|
||||
cmLocalCommonGenerator(cmGlobalGenerator* gg, cmMakefile* mf, WorkDir wd);
|
||||
~cmLocalCommonGenerator() override;
|
||||
|
||||
std::vector<std::string> const& GetConfigNames() const
|
||||
@@ -30,7 +36,7 @@ public:
|
||||
return this->ConfigNames;
|
||||
}
|
||||
|
||||
std::string GetWorkingDirectory() const { return this->WorkingDirectory; }
|
||||
std::string const& GetWorkingDirectory() const;
|
||||
|
||||
std::string MaybeRelativeToWorkDir(std::string const& path) const;
|
||||
|
||||
@@ -42,7 +48,7 @@ public:
|
||||
cmGeneratorTarget const* gt = nullptr) override;
|
||||
|
||||
protected:
|
||||
std::string WorkingDirectory;
|
||||
WorkDir WorkingDirectory;
|
||||
|
||||
std::vector<std::string> ConfigNames;
|
||||
|
||||
|
@@ -39,7 +39,7 @@
|
||||
|
||||
cmLocalNinjaGenerator::cmLocalNinjaGenerator(cmGlobalGenerator* gg,
|
||||
cmMakefile* mf)
|
||||
: cmLocalCommonGenerator(gg, mf, mf->GetState()->GetBinaryDirectory())
|
||||
: cmLocalCommonGenerator(gg, mf, WorkDir::TopBin)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -110,7 +110,7 @@ private:
|
||||
|
||||
cmLocalUnixMakefileGenerator3::cmLocalUnixMakefileGenerator3(
|
||||
cmGlobalGenerator* gg, cmMakefile* mf)
|
||||
: cmLocalCommonGenerator(gg, mf, mf->GetCurrentBinaryDirectory())
|
||||
: cmLocalCommonGenerator(gg, mf, WorkDir::CurBin)
|
||||
{
|
||||
this->MakefileVariableSize = 0;
|
||||
this->ColorMakefile = false;
|
||||
|
Reference in New Issue
Block a user