[cmake-developers] wlink command-line parsing (was: remove CMAKE_NO_QUOTED_OBJECTS variable)

Brad King brad.king at kitware.com
Wed Mar 26 13:47:04 EDT 2014


On 03/26/2014 01:29 PM, Jiri Malak wrote:
> No, you must use only single quotes, because linker has its own command line token parser and for
> file names in file directive with curl braces space is list separator.
> Double quotes can be used with file directive without curl braces then list separator is comma.

I've updated the commit message as requested:

 cmLocalUnixMakefileGenerator3: Re-organize ConvertToQuotedOutputPath
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e98772f2

 Makefile: Generate single-quoted object lists for Watcom
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=13182cd6

I still do not understand how wlink is parsing the command line on
non-Windows platforms.  Currently the Watcom build rules specify:

 file {<OBJECTS>}

which becomes perhaps

 file {'src1.obj' 'src2.obj' 'src3.obj'}

This works on Windows because that operating system launches processes
with command-line strings.  The main(argc,argv) are populated by the
C runtime as explained here:

 http://msdn.microsoft.com/en-us/library/a1y7w461.aspx

However, programs have the option to use GetCommandLine:

 http://msdn.microsoft.com/en-us/library/windows/desktop/ms683156%28v=vs.85%29.aspx

to get the original command-line string for the process and do their
own parsing.  The wlink tool must be doing this in order to parse the
above {} and '' syntax.  However, on POSIX platforms the *shell*
parses the command-line string according to its own rules and the
OS-launched process gets only main(argc,argv) already separated into
multiple arguments.  In the above example the process will get:

 file
 {src1.obj
 src2.obj
 src3.obj}

as four separate arguments.  How does the wlink command-line work?

Please provide an example command line invocation for wlink on Linux
passing multiple objects with spaces in the path.

Thanks,
-Brad




More information about the cmake-developers mailing list