VS: Add VS_SOURCE_SETTINGS_<tool> target property

VS_SOURCE_SETTINGS_<tool> is a list of key value pairs that get written as item
metadata for any file associated with <tool> for that target. The entire value
of VS_SOURCE_SETTINGS_<tool> is evaluated as a generator expression. VS_SETTINGS
can override settings specified in this property.
This commit is contained in:
Matt Davies 2020-03-18 12:38:38 +00:00
parent 2ce42f281f
commit f00e1b816d
2 changed files with 17 additions and 0 deletions

View File

@ -1967,6 +1967,22 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(Elem& e1,
}
}
if (ParsedToolTargetSettings.find(tool) == ParsedToolTargetSettings.end()) {
const char* toolTargetProperty =
this->GeneratorTarget->Target->GetProperty("VS_SOURCE_SETTINGS_" +
std::string(tool));
ConfigToSettings toolTargetSettings;
ParseSettingsProperty(toolTargetProperty, toolTargetSettings);
ParsedToolTargetSettings[tool] = toolTargetSettings;
}
for (const auto& configToSetting : ParsedToolTargetSettings[tool]) {
for (const auto& setting : configToSetting.second) {
toolSettings[configToSetting.first][setting.first] = setting.second;
}
}
ParseSettingsProperty(sf->GetProperty("VS_SETTINGS"), toolSettings);
if (!toolSettings.empty()) {

View File

@ -241,6 +241,7 @@ private:
using ConfigToSettings =
std::unordered_map<std::string,
std::unordered_map<std::string, std::string>>;
std::unordered_map<std::string, ConfigToSettings> ParsedToolTargetSettings;
bool PropertyIsSameInAllConfigs(const ConfigToSettings& toolSettings,
const std::string& propName);
void ParseSettingsProperty(const char* settingsPropertyValue,