The string() Command
Let's learn about the string() command in CMake.
We'll cover the following...
The string() command is used to manipulate strings. It comes with a variety of modes that perform different actions on the string: 
- Search and replace 
- Manipulation 
- Comparison 
- Hashing 
- Generation 
- JSON operations (the last one available since CMake 3.19) 
Full details can be found in the online documentation.
string() modes that accept the <input> argument will accept multiple <input> values and concatenate them before the execution of the command: 
string(PREPEND myVariable "a" "b" "c")
This is the equivalent of the following:
string(PREPEND myVariable "abc")
Let's explore all available string() modes.
Search and replace
The following modes are available:
- string(FIND <haystack> <pattern> <out> [REVERSE])searches for- <pattern>in the- <haystack>string and writes the position found as an integer to the- <out>variable. If the- REVERSEflag was used, it searches from the end of the string to the beginning. This works only for ASCII strings (multibyte support isn't provided).
- string(REPLACE <pattern> <replace> <out> <input>)replaces all occurrences of- <pattern>in- <input>with- <replace>and stores them in the- <out>variable.
- string(REGEX MATCH <pattern> <out> <input>)regex-matches the first occurrence of- <pattern>in- <input>with- <replace>and stores it in the- <out>variable.
- string(REGEX MATCHALL <pattern>...