[CMake] Re: Parsing cmake command line parameters

James Bigler bigler at cs.utah.edu
Tue Dec 18 12:46:07 EST 2007


Rodolfo Schulz de Lima wrote:
> Alexander Neundorf wrote:
> 
>> I have (currently) two ideas:
>> either a special file, e.g. CMakeCustomArgs.txt, which in some way 
>> sets up the custom command line parameters.
> 
> There's a beauty in having everything inside CMakeLists.txt

Not only that, but this becomes a maintenance nightmare.  It's too easy to get these out of sync.

>> Or have a cmake modules, which handles this stuff, and which also 
>> creates a custom target "help-args" or something like that, which 
>> prints the available args. This would not be available before cmake 
>> has successfully run.
> 
> This would be non-intuitive to people not accustomed to cmake.

This isn't a problem if it's documented well.  If "cmake --help" spit out something told the user what to do, they will usually do it.  The problem lies when the programs don't 
behave as expected with no explanation (i.e. Using -DMY_VAR=value instead of -DMY_VAR:STRING=value should be rejected instead silently doing weird things).

Having a good README or INSTALL file does wonders.  That's the first thing I look for in a project.

> 
> I think that the scope of where argument definitions should be defined 
> should be well defined. The example I gave of each cmake --help 
> evocation returning a different set of arguments shouldn't be allowed.
> But it's reasonable to create some arguments when cmake is running under 
> Windows or Linux, etc. And let's not forget that maybe 80% of all uses 
> of command line arguments will be the most trivial one, i.e., statically 
> define those arguments, so sticking with like 90% of all use cases would 
> be good enough, IMHO.
> 
> wxWidgets' configure script throws all possible options, whether they're 
> valid for Windows or Linux. It's really a mess, but it's simple to 
> implement and I've never heard of anyone complaining about it.

So this isn't so much a discussion of being able to parse arguments from the command line, but rather an automated mechanism to detect options in the CMakeLists.txt files and print 
them out when a user does --help.

Many autoconf systems don't do this.  To see the "real" options I have to scan configure.in myself.  For autoconf build systems I have generated, I have to manually add the help 
options.  I think it's silly to try and solve this problem, especially when there is a much better way to do it via ccmake.  I much prefer using ccmake than having the giant 
configure line.

It seems like CMake already has a good way to configure builds, and those used to autoconf just need a little nudging.  I haven't had anyone in my group complain about using ccmake.

That being said, if you really want cmake --help-options, then I guess you would just have to parse all the CMakeLists.txt files, find all occurrences of ADD_ARG() regardless of 
scope, and spit them out.  There really isn't a better option outside of just using ccmake.

James


More information about the CMake mailing list