diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst index a0b5b66188..0f09218549 100644 --- a/Help/manual/cmake-generator-expressions.7.rst +++ b/Help/manual/cmake-generator-expressions.7.rst @@ -2410,6 +2410,13 @@ special meaning. A literal ``;``. Used to prevent list expansion on an argument with ``;``. +.. genex:: $ + + .. versionadded:: 3.30 + + A literal ``"``. Used to allow string literal quotes inside a generator expression. + + Deprecated Expressions ---------------------- diff --git a/Help/release/dev/genex-quote.rst b/Help/release/dev/genex-quote.rst new file mode 100644 index 0000000000..61bcfc00df --- /dev/null +++ b/Help/release/dev/genex-quote.rst @@ -0,0 +1,4 @@ +genex-quote +----------- + +* The :genex:`$` generator expression was added to evaluate to ``"``. diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index c8147b2937..4274448dfd 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -1859,6 +1859,7 @@ struct CharacterNode : public cmGeneratorExpressionNode static const CharacterNode<'>'> angle_rNode; static const CharacterNode<','> commaNode; static const CharacterNode<';'> semicolonNode; +static const CharacterNode<'"'> quoteNode; struct CompilerIdNode : public cmGeneratorExpressionNode { @@ -4529,6 +4530,7 @@ const cmGeneratorExpressionNode* cmGeneratorExpressionNode::GetNode( { "ANGLE-R", &angle_rNode }, { "COMMA", &commaNode }, { "SEMICOLON", &semicolonNode }, + { "QUOTE", "eNode }, { "TARGET_PROPERTY", &targetPropertyNode }, { "TARGET_NAME", &targetNameNode }, { "TARGET_OBJECTS", &targetObjectsNode }, diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt index df7cda0c4a..be750e1809 100644 --- a/Tests/GeneratorExpression/CMakeLists.txt +++ b/Tests/GeneratorExpression/CMakeLists.txt @@ -70,6 +70,7 @@ add_custom_target(check-part1 ALL -Dtest_strequal_comma=$,$> -Dtest_strequal_semicolon=$,$> -Dtest_strequal_angle_r_comma=$,$> + -Dtest_strequal_quote=$,$> -Dtest_strequal_both_empty=$ -Dtest_strequal_one_empty=$ -Dtest_inlist_true=$b> diff --git a/Tests/GeneratorExpression/check-part1.cmake b/Tests/GeneratorExpression/check-part1.cmake index 41bcd6d999..ddf2507ca9 100644 --- a/Tests/GeneratorExpression/check-part1.cmake +++ b/Tests/GeneratorExpression/check-part1.cmake @@ -47,6 +47,7 @@ check(test_strequal_angle_r "1") check(test_strequal_comma "1") check(test_strequal_semicolon "1") check(test_strequal_angle_r_comma "0") +check(test_strequal_quote "1") check(test_strequal_both_empty "1") check(test_strequal_one_empty "0") check(test_inlist_true "1") diff --git a/Tests/RunCMake/add_custom_command/CommentGenex-build-stdout.txt b/Tests/RunCMake/add_custom_command/CommentGenex-build-stdout.txt index bf49657424..76708c43cb 100644 --- a/Tests/RunCMake/add_custom_command/CommentGenex-build-stdout.txt +++ b/Tests/RunCMake/add_custom_command/CommentGenex-build-stdout.txt @@ -1 +1 @@ -lorem ipsum, 01 +"lorem ipsum, 01" diff --git a/Tests/RunCMake/add_custom_command/CommentGenex.cmake b/Tests/RunCMake/add_custom_command/CommentGenex.cmake index f517392e28..b3931f405a 100644 --- a/Tests/RunCMake/add_custom_command/CommentGenex.cmake +++ b/Tests/RunCMake/add_custom_command/CommentGenex.cmake @@ -3,7 +3,7 @@ set_property(TARGET helper PROPERTY MY_TEXT "lorem ipsum") add_custom_command( OUTPUT out.txt COMMAND ${CMAKE_COMMAND} -E echo true - COMMENT "$$ $$" + COMMENT "$$$ $$$" ) set_property(SOURCE out.txt PROPERTY SYMBOLIC 1) add_custom_target(main ALL DEPENDS out.txt)