[CMake] handling global state

Brandon J. Van Every bvanevery at gmail.com
Thu Jun 1 15:37:58 EDT 2006


I need some stylistic advice on handling global state.  I'm starting to 
break my monolithic CMakeLists.txt up into subdirectories.  I'm building 
the Chicken compiler and I need to do staged builds.  A lot of 
essentially the same operations, done on itself multiple times so that 
it's compiled up to its own most current version.

I realize I can use the cache to pass global state.  However, there's 
often global state that I don't want the user to modify.  Nor do I 
really want to clutter the output of CMakeSetup with such extraneous 
state.  I could mark those variables as advanced, which reduces the 
immediately visible clutter, but I don't really want clutter in the 
advanced variables either.  Also they can still modify them, which is 
not what I want.  For instance I've got certain constants like the 
minimum Chicken build number, and nothing good can come from someone 
changing them.  I've also got a lot of -D flags from probing the system, 
that go into ADD_DEFINITIONS.  I don't want the user to mess with 'em, 
or run the probes multiple times.  I just want to determine them at the 
toplevel and then pass them down to subdirectories.

I could include constants via an INCLUDE(global.cmake) file, but I'd 
rather have them in the toplevel CMakeLists.txt.  Right at the beginning 
of it, where a maintainer can easily see what's going on and nothing is 
obfuscated.

So how do you pass read-only global state to subdirectory consumers?


Cheers,
Brandon Van Every



More information about the CMake mailing list