1
0
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:
Brad King
2021-05-13 10:08:35 -04:00
parent 15fa320071
commit d346805e41
4 changed files with 30 additions and 10 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -39,7 +39,7 @@
cmLocalNinjaGenerator::cmLocalNinjaGenerator(cmGlobalGenerator* gg,
cmMakefile* mf)
: cmLocalCommonGenerator(gg, mf, mf->GetState()->GetBinaryDirectory())
: cmLocalCommonGenerator(gg, mf, WorkDir::TopBin)
{
}

View File

@@ -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;