mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-05 13:50:10 -05:00
genex: Add TARGET_NAME_IF_EXISTS expression
Define `$<TARGET_NAME_IF_EXISTS:tgt>` to mean `tgt` if the target exists and otherwise an empty string.
This commit is contained in:
@@ -331,6 +331,40 @@ static const struct TargetExistsNode : public cmGeneratorExpressionNode
|
||||
}
|
||||
} targetExistsNode;
|
||||
|
||||
static const struct TargetNameIfExistsNode : public cmGeneratorExpressionNode
|
||||
{
|
||||
TargetNameIfExistsNode() {}
|
||||
|
||||
int NumExpectedParameters() const override { return 1; }
|
||||
|
||||
std::string Evaluate(
|
||||
const std::vector<std::string>& parameters,
|
||||
cmGeneratorExpressionContext* context,
|
||||
const GeneratorExpressionContent* content,
|
||||
cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
|
||||
{
|
||||
if (parameters.size() != 1) {
|
||||
reportError(context, content->GetOriginalExpression(),
|
||||
"$<TARGET_NAME_IF_EXISTS:...> expression requires one "
|
||||
"parameter");
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::string targetName = parameters.front();
|
||||
if (targetName.empty() ||
|
||||
!cmGeneratorExpression::IsValidTargetName(targetName)) {
|
||||
reportError(context, content->GetOriginalExpression(),
|
||||
"$<TARGET_NAME_IF_EXISTS:tgt> expression requires a "
|
||||
"non-empty valid target name.");
|
||||
return std::string();
|
||||
}
|
||||
|
||||
return context->LG->GetMakefile()->FindTargetToUse(targetName)
|
||||
? targetName
|
||||
: std::string();
|
||||
}
|
||||
} targetNameIfExistsNode;
|
||||
|
||||
static const struct LowerCaseNode : public cmGeneratorExpressionNode
|
||||
{
|
||||
LowerCaseNode() {}
|
||||
@@ -1897,6 +1931,7 @@ const cmGeneratorExpressionNode* cmGeneratorExpressionNode::GetNode(
|
||||
nodeMap["TARGET_OBJECTS"] = &targetObjectsNode;
|
||||
nodeMap["TARGET_POLICY"] = &targetPolicyNode;
|
||||
nodeMap["TARGET_EXISTS"] = &targetExistsNode;
|
||||
nodeMap["TARGET_NAME_IF_EXISTS"] = &targetNameIfExistsNode;
|
||||
nodeMap["BUILD_INTERFACE"] = &buildInterfaceNode;
|
||||
nodeMap["INSTALL_INTERFACE"] = &installInterfaceNode;
|
||||
nodeMap["INSTALL_PREFIX"] = &installPrefixNode;
|
||||
|
||||
Reference in New Issue
Block a user