I was just replying to an acquaintance who was e-mailing me about CMake
configuration when I realized that CMake configuration options
which are only available depending on how other configuration
options are set could be analyzed/displayed using graph theory
(from a 5-minute study of graph theory from reading the first
paragraph of the Wikipedia article on that :-) ).

I looked for a graphviz output file option for this in the cmake
documentation and only found the --graphviz option which will
"Generate a graphviz input file that will contain all the library and
executable dependencies in the project." I used that for PLplot once.
It worked and gave a pretty impressive visual demonstration of all the
complicated and numerous PLplot dependencies.  I wasn't surprised by
any of those detailed relationships because I have them pretty much
memorized, but such information would be a definite help to someone
just getting up to speed with the PLplot build system (or any
CMake-based build system)

Could something similar be done for the dependencies between CMake
options?  I think that would be quite useful (especially if it
included the documentation of the options) for further graphviz
analysis and display of the
relationships between the totality of all the CMake options for a
given build system.  The problem with using cmake-gui for this task
(or the equivalent cmake + looking at the resulting CMakeCache.txt
file) is you only see the first layer of possible configurations as
opposed to the totality of options you could visualize with a graphviz
file.

Moving to a related topic, if you run cmake with no -D options in an
empty build tree, you get the first layer of options available to you
for a particular build system in nicely documented form in
CMakeCache.txt.  Once you set some of those as cmake -D options
(always run within an empty build tree), then you get the next layer
of options available to you, and so on, with each iteration
accumulating the command-line -D options you need from the combination
of previous sets of options and the new ones.

I am not familiar with the CMake GUI's, cmake-gui and ccmake, but I
assume they do exactly this same task of displaying the documented
currently available options that can be set depending on the previous
"layer" of set options.  But do any of these GUI's have an undo button
(and redo button to undo the undo) so you can easily and consistently
navigate to any previous layer of options that you have effectively
tried before for an empty build tree like you can so easily do (simply
using up arrow or down arrow to remove the build tree and navigate to
some other previously tried set of -D options) with the command-line
approach?  It appears from discussions with my GUI-oriented
acquaintance, undo and redo buttons would be worthwhile now if those
haven't been implemented yet in the CMake GUI's.

I hope in this post I have given this audience some useful food for
thought about potential improvements to CMake concerning (1) a
graphviz output file of all options including their documentation to
help display an overview of all options and their logical
relationships and (2) possibly additional ease of use for CMake GUI's
with undo and redo (if those haven't been implemented yet) in setting
various layers of those options that become available depending on
other options set in previous layers. I admit to being unfamiliar with
the CMake GUI's (because I was not impressed with them years ago), but
if they already have undo and redo implemented perhaps it is time to
learn about them (and especially if they are exactly equivalent to the
situation I understand which is running cmake in an empty build tree
with various layers of possible -D options set on the cmake command
line).

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.sf.net); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to