[CMake] append command
Michael Wild
themiwi at gmail.com
Thu Aug 11 11:20:30 EDT 2011
On Thu 11 Aug 2011 04:46:44 PM CEST, David Cole wrote:
> On Thu, Aug 11, 2011 at 7:29 AM, Glenn Coombs <glenn.coombs at gmail.com
> <mailto:glenn.coombs at gmail.com>> wrote:
>
> The problem is that we currently already have 2 parallel systems.
> Some of the variables like CMAKE_EXE_LINKER_FLAGS are passed through
> as-is to the compiler or linker. So, by definition, these variables
> are space separated lists of options. Attempting to use
> list(APPEND) on them adds semicolon characters which causes breakage
> unless you manually remove them.
>
> Using list(APPEND), followed by string(REGEX REPLACE) is even more
> verbose than just using the set(foo "${foo} ...") approach. I see
> an append() command as just the equivalent of the += operator in
> C/C++ and don't think that adding it would necessarily require
> adding any more space separated list functionality. And I agree
> that you wouldn't really want
>
> An alternative approach (but harder to implement) would be to
> abandon space separated lists altogether. Variables like
> CMAKE_EXE_LINKER_FLAGS would be stored as lists and then cmake would
> format them internally as space separated strings before passing
> them to the native build tools. You might have to change the way
> cmake internally represents lists if you ever wanted to be able to
> pass options with semicolons through to the build tools.
>
> --
> Glenn
>
>
>
> On 9 August 2011 20:34, Alan W. Irwin <irwin at beluga.phys.uvic.ca
> <mailto:irwin at beluga.phys.uvic.ca>> wrote:
>
> On 2011-08-09 17:19+0100 Glenn Coombs wrote:
>
> Probably too late now and there isn't a bug filed so far as
> I know, but one thing I would love to see added to cmake is
> an append command
> so that lines like this:
>
> set(CMAKE_EXE_LINKER_FLAGS_ RELEASE
> "${CMAKE_EXE_LINKER_FLAGS_ RELEASE} /INCREMENTAL:NO")
>
> become shorter and easier to understand:
>
> append(CMAKE_EXE_LINKER_FLAGS_ RELEASE "/INCREMENTAL:NO")
>
> The existing syntax for the set command is just ugly when
> appending. I know you can define a macro or function to do
> this but I just
> feel that it should be supported out of the box as it would
> make CMakeLists.txt files more readable.
>
>
> Hi Glenn:
>
> I am changing the subject line to keep discussion out of the
> bugfix thread as requested by Dave.
>
> It appears what you want is the list APPEND command for
> blank-delimited strings. But then later someone will want to add
> other parts of the list functionality to blank-delimited strings as
> well such as removing items from the blank-delimited list.
> Until you
> have two parallel list systems, one for blank delimited strings and
> one for semicolon-delimited strings (i.e., the current lists).
>
> I think most would reject the idea of having two parallel list
> systems
> with different delimiters so here is one possibility.
>
> For now just stick to list functionality, e.g.,
>
> list(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO")
>
> and then change the semicolon delimiters to blanks using
>
> strings(REGEX REPLACE ...)
>
> once you have the list completely assembled. Of course, that
> will not
> work for the corner case where the strings contain semicolons. So in
> the long term, the right thing to do with lists might be to allow a
> choice of delimiter if you could do that in such a way as to
> preserve
> backwards compatibility.
>
> Alan
> __________________________
> Alan W. Irwin
>
> Astronomical research affiliation with Department of Physics and
> Astronomy,
> University of Victoria (astrowww.phys.uvic.ca
> <http://astrowww.phys.uvic.ca>).
>
> Programming affiliations with the FreeEOS equation-of-state
> implementation
> for stellar interiors (freeeos.sf.net <http://freeeos.sf.net>);
> PLplot scientific plotting software
> package (plplot.org <http://plplot.org>); the libLASi project
> (unifont.org/lasi <http://unifont.org/lasi>); the Loads of
> Linux Links project (loll.sf.net <http://loll.sf.net>); and the
> Linux Brochure Project
> (lbproject.sf.net <http://lbproject.sf.net>).
> __________________________
>
> Linux-powered Science
> __________________________
>
>
>
> Until somebody comes up with an approach that is reasonably acceptable
> by consensus, we will keep things as they are. Please use the (verbose,
> but easily understandable) current form for the foreseeable future:
>
> set(xyz "${xyz} /newstuff")
>
> (I am personally adamantly opposed to an actual "append" command because
> of the existence of the "list(APPEND" feature... I think "append" will
> cause even more confusion...)
>
>
> Thanks,
> David Cole
> Kitware, Inc.
How about
string(APPEND " /newstuff" xyz)
It is not satisfactory in that it doesn't follow the semantics of all
the other string(...) commands which never modify their input.
Michael
More information about the CMake
mailing list