| separate_arguments | |
| ------------------ | |
| Parse command-line arguments into a semicolon-separated list. | |
| .. code-block:: cmake | |
| separate_arguments(<variable> <mode> [PROGRAM [SEPARATE_ARGS]] <args>) | |
| Parses a space-separated string ``<args>`` into a list of items, | |
| and stores this list in semicolon-separated standard form in ``<variable>``. | |
| This function is intended for parsing command-line arguments. | |
| The entire command line must be passed as one string in the | |
| argument ``<args>``. | |
| The exact parsing rules depend on the operating system. | |
| They are specified by the ``<mode>`` argument which must | |
| be one of the following keywords: | |
| ``UNIX_COMMAND`` | |
| Arguments are separated by unquoted whitespace. | |
| Both single-quote and double-quote pairs are respected. | |
| A backslash escapes the next literal character (``\"`` is ``"``); | |
| there are no special escapes (``\n`` is just ``n``). | |
| ``WINDOWS_COMMAND`` | |
| A Windows command-line is parsed using the same | |
| syntax the runtime library uses to construct argv at startup. It | |
| separates arguments by whitespace that is not double-quoted. | |
| Backslashes are literal unless they precede double-quotes. See the | |
| MSDN article `Parsing C Command-Line Arguments`_ for details. | |
| ``NATIVE_COMMAND`` | |
| .. versionadded:: 3.9 | |
| Proceeds as in ``WINDOWS_COMMAND`` mode if the host system is Windows. | |
| Otherwise proceeds as in ``UNIX_COMMAND`` mode. | |
| ``PROGRAM`` | |
| .. versionadded:: 3.19 | |
| The first item in ``<args>`` is assumed to be an executable and will be | |
| searched in the system search path or left as a full path. If not found, | |
| ``<variable>`` will be empty. Otherwise, ``<variable>`` is a list of 2 | |
| elements: | |
| 0. Absolute path of the program | |
| 1. Any command-line arguments present in ``<args>`` as a string | |
| For example: | |
| .. code-block:: cmake | |
| separate_arguments (out UNIX_COMMAND PROGRAM "cc -c main.c") | |
| * First element of the list: ``/path/to/cc`` | |
| * Second element of the list: ``" -c main.c"`` | |
| ``SEPARATE_ARGS`` | |
| When this sub-option of ``PROGRAM`` option is specified, command-line | |
| arguments will be split as well and stored in ``<variable>``. | |
| For example: | |
| .. code-block:: cmake | |
| separate_arguments (out UNIX_COMMAND PROGRAM SEPARATE_ARGS "cc -c main.c") | |
| The contents of ``out`` will be: ``/path/to/cc;-c;main.c`` | |
| .. _`Parsing C Command-Line Arguments`: https://msdn.microsoft.com/library/a1y7w461.aspx | |
| .. code-block:: cmake | |
| separate_arguments(<var>) | |
| Convert the value of ``<var>`` to a semi-colon separated list. All | |
| spaces are replaced with ';'. This helps with generating command | |
| lines. |