[CMake] Supporting large numbers of projects

KSpam keesling_spam at cox.net
Tue Mar 18 13:25:49 EDT 2008


My company is using CMake to build a large number of projects (~300).  The 
developers have complaints regarding the size (and load-time, etc) of the 
top-level solution file.  I am attempting to address their concerns.

Take this hypothetical project hierarchy:

module-1/
	sub-module-1/
		project-1
	...
	sub-module-n/
		project-n/
...
module-n/
	sub-module-1/
		project-1/
	sub-module-n/
		project-n/

In Linux, I can simply change to module-1/sub-module-1/project-1 and build 
from there.  Any dependencies of the project will automatically be built as 
well.  Unfortunately, this does not work with Visual Studio on Windows.  On 
Windows, the dependencies are not automatically built when opening up a lower 
level solution file.  Will this be addressed in CMake 2.6?

One option I have given to the users is the ability to switch between source 
and binary modules or sub-modules.  For instance, the project would have the 
following options:

MY_BUILD_module-1:BOOL
MY_BUILD_sub-module-1:BOOL
...
MY_BUILD_module-n:BOOL
MY_BUILD-sub-module-n:BOOL

When all of the projects are built, I can manually switch off the build 
options for some of the modules and sub-modules.  This allows us to create 
partial-source deliverables to customers (i.e. module-1 is delivered as 
headers and libs, and module-n is delivered as source).  This also reduces 
the complexity of the top-level solution file.  Additionally, this allows us 
to build sets of code against tagged release binaries.

To accomplish this scheme, I have to manipulate "*_LINK_TYPE", "*_LIB_DEPENDS" 
variables for modules and sub-modules that are turned OFF (I am using 
INTERNAL CACHE variables for this).  I found that I have to configure twice 
prior to generating the build files any time a "MY_BUILD_*" option is 
toggled.

Ideally, I would like a way to prevent the generation of the build files until 
the second configure completes.  Is there a way for me to accomplish this?

Thanks,
Justin


More information about the CMake mailing list