mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-20 12:53:55 +08:00
LocalGenerator: refactoring
Introduce method AppendCompileOptions to support future source file property COMPILE_OPTIONS.
This commit is contained in:
@@ -3521,7 +3521,7 @@ void cmGlobalXCodeGenerator::AppendDefines(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cmGlobalXCodeGenerator::AppendFlag(std::string& flags,
|
void cmGlobalXCodeGenerator::AppendFlag(std::string& flags,
|
||||||
std::string const& flag)
|
std::string const& flag) const
|
||||||
{
|
{
|
||||||
// Short-circuit for an empty flag.
|
// Short-circuit for an empty flag.
|
||||||
if (flag.empty()) {
|
if (flag.empty()) {
|
||||||
|
@@ -104,7 +104,7 @@ public:
|
|||||||
bool ShouldStripResourcePath(cmMakefile*) const override;
|
bool ShouldStripResourcePath(cmMakefile*) const override;
|
||||||
|
|
||||||
bool SetGeneratorToolset(std::string const& ts, cmMakefile* mf) override;
|
bool SetGeneratorToolset(std::string const& ts, cmMakefile* mf) override;
|
||||||
void AppendFlag(std::string& flags, std::string const& flag);
|
void AppendFlag(std::string& flags, std::string const& flag) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void AddExtraIDETargets() override;
|
void AddExtraIDETargets() override;
|
||||||
|
@@ -792,19 +792,14 @@ void cmLocalGenerator::AddCompileOptions(std::string& flags,
|
|||||||
if (const char* langFlagRegexStr =
|
if (const char* langFlagRegexStr =
|
||||||
this->Makefile->GetDefinition(langFlagRegexVar)) {
|
this->Makefile->GetDefinition(langFlagRegexVar)) {
|
||||||
// Filter flags acceptable to this language.
|
// Filter flags acceptable to this language.
|
||||||
cmsys::RegularExpression r(langFlagRegexStr);
|
|
||||||
std::vector<std::string> opts;
|
std::vector<std::string> opts;
|
||||||
if (const char* targetFlags = target->GetProperty("COMPILE_FLAGS")) {
|
if (const char* targetFlags = target->GetProperty("COMPILE_FLAGS")) {
|
||||||
cmSystemTools::ParseWindowsCommandLine(targetFlags, opts);
|
cmSystemTools::ParseWindowsCommandLine(targetFlags, opts);
|
||||||
}
|
}
|
||||||
target->GetCompileOptions(opts, config, lang);
|
target->GetCompileOptions(opts, config, lang);
|
||||||
for (std::string const& opt : opts) {
|
// (Re-)Escape these flags. COMPILE_FLAGS were already parsed
|
||||||
if (r.find(opt.c_str())) {
|
// as a command line above, and COMPILE_OPTIONS are escaped.
|
||||||
// (Re-)Escape this flag. COMPILE_FLAGS were already parsed
|
this->AppendCompileOptions(flags, opts, langFlagRegexStr);
|
||||||
// as a command line above, and COMPILE_OPTIONS are escaped.
|
|
||||||
this->AppendFlagEscape(flags, opt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Use all flags.
|
// Use all flags.
|
||||||
if (const char* targetFlags = target->GetProperty("COMPILE_FLAGS")) {
|
if (const char* targetFlags = target->GetProperty("COMPILE_FLAGS")) {
|
||||||
@@ -813,10 +808,8 @@ void cmLocalGenerator::AddCompileOptions(std::string& flags,
|
|||||||
}
|
}
|
||||||
std::vector<std::string> opts;
|
std::vector<std::string> opts;
|
||||||
target->GetCompileOptions(opts, config, lang);
|
target->GetCompileOptions(opts, config, lang);
|
||||||
for (std::string const& opt : opts) {
|
// COMPILE_OPTIONS are escaped.
|
||||||
// COMPILE_OPTIONS are escaped.
|
this->AppendCompileOptions(flags, opts);
|
||||||
this->AppendFlagEscape(flags, opt);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto const& it : target->GetMaxLanguageStandards()) {
|
for (auto const& it : target->GetMaxLanguageStandards()) {
|
||||||
@@ -1876,7 +1869,7 @@ void cmLocalGenerator::AddConfigVariableFlags(std::string& flags,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cmLocalGenerator::AppendFlags(std::string& flags,
|
void cmLocalGenerator::AppendFlags(std::string& flags,
|
||||||
const std::string& newFlags)
|
const std::string& newFlags) const
|
||||||
{
|
{
|
||||||
if (!newFlags.empty()) {
|
if (!newFlags.empty()) {
|
||||||
if (!flags.empty()) {
|
if (!flags.empty()) {
|
||||||
@@ -1886,7 +1879,8 @@ void cmLocalGenerator::AppendFlags(std::string& flags,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmLocalGenerator::AppendFlags(std::string& flags, const char* newFlags)
|
void cmLocalGenerator::AppendFlags(std::string& flags,
|
||||||
|
const char* newFlags) const
|
||||||
{
|
{
|
||||||
if (newFlags && *newFlags) {
|
if (newFlags && *newFlags) {
|
||||||
this->AppendFlags(flags, std::string(newFlags));
|
this->AppendFlags(flags, std::string(newFlags));
|
||||||
@@ -1894,7 +1888,7 @@ void cmLocalGenerator::AppendFlags(std::string& flags, const char* newFlags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cmLocalGenerator::AppendFlagEscape(std::string& flags,
|
void cmLocalGenerator::AppendFlagEscape(std::string& flags,
|
||||||
const std::string& rawFlag)
|
const std::string& rawFlag) const
|
||||||
{
|
{
|
||||||
this->AppendFlags(flags, this->EscapeForShell(rawFlag));
|
this->AppendFlags(flags, this->EscapeForShell(rawFlag));
|
||||||
}
|
}
|
||||||
@@ -1930,6 +1924,41 @@ void cmLocalGenerator::AppendIPOLinkerFlags(std::string& flags,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmLocalGenerator::AppendCompileOptions(std::string& options,
|
||||||
|
const char* options_list,
|
||||||
|
const char* regex) const
|
||||||
|
{
|
||||||
|
// Short-circuit if there are no options.
|
||||||
|
if (!options_list) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expand the list of options.
|
||||||
|
std::vector<std::string> options_vec;
|
||||||
|
cmSystemTools::ExpandListArgument(options_list, options_vec);
|
||||||
|
this->AppendCompileOptions(options, options_vec, regex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmLocalGenerator::AppendCompileOptions(
|
||||||
|
std::string& options, const std::vector<std::string>& options_vec,
|
||||||
|
const char* regex) const
|
||||||
|
{
|
||||||
|
if (regex != nullptr) {
|
||||||
|
// Filter flags upon specified reges.
|
||||||
|
cmsys::RegularExpression r(regex);
|
||||||
|
|
||||||
|
for (std::string const& opt : options_vec) {
|
||||||
|
if (r.find(opt.c_str())) {
|
||||||
|
this->AppendFlagEscape(options, opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (std::string const& opt : options_vec) {
|
||||||
|
this->AppendFlagEscape(options, opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cmLocalGenerator::AppendDefines(std::set<std::string>& defines,
|
void cmLocalGenerator::AppendDefines(std::set<std::string>& defines,
|
||||||
const char* defines_list) const
|
const char* defines_list) const
|
||||||
{
|
{
|
||||||
|
@@ -118,10 +118,11 @@ public:
|
|||||||
cmGeneratorTarget const* target,
|
cmGeneratorTarget const* target,
|
||||||
const std::string& lang);
|
const std::string& lang);
|
||||||
///! Append flags to a string.
|
///! Append flags to a string.
|
||||||
virtual void AppendFlags(std::string& flags, const std::string& newFlags);
|
virtual void AppendFlags(std::string& flags,
|
||||||
virtual void AppendFlags(std::string& flags, const char* newFlags);
|
const std::string& newFlags) const;
|
||||||
|
virtual void AppendFlags(std::string& flags, const char* newFlags) const;
|
||||||
virtual void AppendFlagEscape(std::string& flags,
|
virtual void AppendFlagEscape(std::string& flags,
|
||||||
const std::string& rawFlag);
|
const std::string& rawFlag) const;
|
||||||
void AppendIPOLinkerFlags(std::string& flags, cmGeneratorTarget* target,
|
void AppendIPOLinkerFlags(std::string& flags, cmGeneratorTarget* target,
|
||||||
const std::string& config,
|
const std::string& config,
|
||||||
const std::string& lang);
|
const std::string& lang);
|
||||||
@@ -165,6 +166,22 @@ public:
|
|||||||
void AppendDefines(std::set<std::string>& defines,
|
void AppendDefines(std::set<std::string>& defines,
|
||||||
const std::vector<std::string>& defines_vec) const;
|
const std::vector<std::string>& defines_vec) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode a list of compile options for the compiler
|
||||||
|
* command line.
|
||||||
|
*/
|
||||||
|
void AppendCompileOptions(std::string& options, const char* options_list,
|
||||||
|
const char* regex = nullptr) const;
|
||||||
|
void AppendCompileOptions(std::string& options,
|
||||||
|
std::string const& options_list,
|
||||||
|
const char* regex = nullptr) const
|
||||||
|
{
|
||||||
|
this->AppendCompileOptions(options, options_list.c_str(), regex);
|
||||||
|
}
|
||||||
|
void AppendCompileOptions(std::string& options,
|
||||||
|
const std::vector<std::string>& options_vec,
|
||||||
|
const char* regex = nullptr) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Join a set of defines into a definesString with a space separator.
|
* Join a set of defines into a definesString with a space separator.
|
||||||
*/
|
*/
|
||||||
|
@@ -830,8 +830,8 @@ std::string cmLocalUnixMakefileGenerator3::GetRelativeTargetDirectory(
|
|||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmLocalUnixMakefileGenerator3::AppendFlags(std::string& flags,
|
void cmLocalUnixMakefileGenerator3::AppendFlags(
|
||||||
const std::string& newFlags)
|
std::string& flags, const std::string& newFlags) const
|
||||||
{
|
{
|
||||||
if (this->IsWatcomWMake() && !newFlags.empty()) {
|
if (this->IsWatcomWMake() && !newFlags.empty()) {
|
||||||
std::string newf = newFlags;
|
std::string newf = newFlags;
|
||||||
@@ -845,7 +845,7 @@ void cmLocalUnixMakefileGenerator3::AppendFlags(std::string& flags,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cmLocalUnixMakefileGenerator3::AppendFlags(std::string& flags,
|
void cmLocalUnixMakefileGenerator3::AppendFlags(std::string& flags,
|
||||||
const char* newFlags)
|
const char* newFlags) const
|
||||||
{
|
{
|
||||||
this->cmLocalGenerator::AppendFlags(flags, newFlags);
|
this->cmLocalGenerator::AppendFlags(flags, newFlags);
|
||||||
}
|
}
|
||||||
|
@@ -88,8 +88,9 @@ public:
|
|||||||
const std::string& tgt);
|
const std::string& tgt);
|
||||||
|
|
||||||
// append flags to a string
|
// append flags to a string
|
||||||
void AppendFlags(std::string& flags, const std::string& newFlags) override;
|
void AppendFlags(std::string& flags,
|
||||||
void AppendFlags(std::string& flags, const char* newFlags) override;
|
const std::string& newFlags) const override;
|
||||||
|
void AppendFlags(std::string& flags, const char* newFlags) const override;
|
||||||
|
|
||||||
// append an echo command
|
// append an echo command
|
||||||
enum EchoColor
|
enum EchoColor
|
||||||
|
@@ -31,10 +31,10 @@ std::string cmLocalXCodeGenerator::GetTargetDirectory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cmLocalXCodeGenerator::AppendFlagEscape(std::string& flags,
|
void cmLocalXCodeGenerator::AppendFlagEscape(std::string& flags,
|
||||||
const std::string& rawFlag)
|
const std::string& rawFlag) const
|
||||||
{
|
{
|
||||||
cmGlobalXCodeGenerator* gg =
|
const cmGlobalXCodeGenerator* gg =
|
||||||
static_cast<cmGlobalXCodeGenerator*>(this->GlobalGenerator);
|
static_cast<const cmGlobalXCodeGenerator*>(this->GlobalGenerator);
|
||||||
gg->AppendFlag(flags, rawFlag);
|
gg->AppendFlag(flags, rawFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@ public:
|
|||||||
std::string GetTargetDirectory(
|
std::string GetTargetDirectory(
|
||||||
cmGeneratorTarget const* target) const override;
|
cmGeneratorTarget const* target) const override;
|
||||||
void AppendFlagEscape(std::string& flags,
|
void AppendFlagEscape(std::string& flags,
|
||||||
const std::string& rawFlag) override;
|
const std::string& rawFlag) const override;
|
||||||
void Generate() override;
|
void Generate() override;
|
||||||
virtual void GenerateInstallRules();
|
virtual void GenerateInstallRules();
|
||||||
void ComputeObjectFilenames(
|
void ComputeObjectFilenames(
|
||||||
|
Reference in New Issue
Block a user