MCPcopy Create free account
hub / github.com/Kitware/CMake / Evaluate

Method Evaluate

Source/cmGeneratorExpressionNode.cxx:3183–3228  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3181 int NumExpectedParameters() const override { return TwoOrMoreParameters; }
3182
3183 std::string Evaluate(
3184 std::vector<std::string> const& parameters, cm::GenEx::Evaluation* eval,
3185 GeneratorExpressionContent const* content,
3186 cmGeneratorExpressionDAGChecker* dagChecker) const override
3187 {
3188 if (!eval->HeadTarget || !dagChecker ||
3189 !(dagChecker->EvaluatingLinkExpression() ||
3190 dagChecker->EvaluatingLinkLibraries() ||
3191 dagChecker->EvaluatingLinkerLauncher())) {
3192 reportError(
3193 eval, content->GetOriginalExpression(),
3194 "$<LINK_LANG_AND_ID:lang,id> may only be used with binary targets "
3195 "to specify link libraries, link directories, link options, and "
3196 "link "
3197 "depends.");
3198 return std::string();
3199 }
3200
3201 cmGlobalGenerator const* gg = eval->Context.LG->GetGlobalGenerator();
3202 std::string genName = gg->GetName();
3203 if (genName.find("Makefiles") == std::string::npos &&
3204 genName.find("Ninja") == std::string::npos &&
3205 genName.find("FASTBuild") == std::string::npos &&
3206 genName.find("Visual Studio") == std::string::npos &&
3207 genName.find("Xcode") == std::string::npos &&
3208 genName.find("Watcom WMake") == std::string::npos &&
3209 genName.find("Green Hills MULTI") == std::string::npos) {
3210 reportError(
3211 eval, content->GetOriginalExpression(),
3212 "$<LINK_LANG_AND_ID:lang,id> not supported for this generator.");
3213 return std::string();
3214 }
3215
3216 if (dagChecker->EvaluatingLinkLibraries()) {
3217 eval->HadHeadSensitiveCondition = true;
3218 eval->HadLinkLanguageSensitiveCondition = true;
3219 }
3220
3221 std::string const& lang = eval->Context.Language;
3222 if (lang == parameters.front()) {
3223 std::vector<std::string> idParameter((parameters.cbegin() + 1),
3224 parameters.cend());
3225 return LinkerId::Evaluate(idParameter, eval, content, lang);
3226 }
3227 return "0";
3228 }
3229} linkLanguageAndIdNode;
3230
3231struct CompilerLinkerIdNode : public cmGeneratorExpressionNode

Callers

nothing calls this directly

Calls 11

reportErrorFunction · 0.85
GetOriginalExpressionMethod · 0.80
cbeginMethod · 0.80
cendMethod · 0.80
GetGlobalGeneratorMethod · 0.45
GetNameMethod · 0.45
findMethod · 0.45
frontMethod · 0.45

Tested by

no test coverage detected