[CMake] autoheader

Bill Hoffman bill.hoffman at kitware.com
Mon Mar 30 11:58:47 EDT 2009


Hendrik Sattler wrote:
> Zitat von Bill Hoffman <bill.hoffman at kitware.com>:
> 
>> I have seen several requests for an autoheader type function to be
>> added to CMake.  I have never used autoheader, but I gather it takes a
>> list of variables and generates a config.h.in file automatically.  Does
>> anyone on the list have experience with autoheader?   If so, what would
>> a nice CMake api for something like this look like?
> 
> Well, autoheader just takes the result of certain tests and prepares a 
> file that is usable e.g. with configure_file( .... @ONLY ). Usually, 
> that contains much more than anyone needs or wants.
> It addresses the problem of not having to keep to distinct lists of 
> variables to replace (avoiding typos) but limits itself to a strict format.
> 
> A cmake-equalvalent could be a configure_file()-like function that takes 
> a list of variables or mark variables and use all of them. There is no 
> point in emulating the actual autoheader behaviour as that has the same 
> problem as the configure script itself: an automatically created (and 
> thus non-source) file in the source tree.
> You can even make it better than autoheader and emit a file with 
> #define/#undef for C and something with const variables for C++ (type 
> safety) and something else for other supported languages. That would 
> make it more complex but definitely better.
> 

So, what would the API be?  I am thinking something that you just give a 
list of variables and a file name.

set(VARS HAS_A HAS_B HAS_C)
set(STRING_VARS STRING_A STRING_B)
cmake_autoheader(CMAKEDEFINE_VARS ${VARS}
                  STRING_VARS ${STRING_VARS}
                  HEADER config.h.in)


This would create:
config.h.in
#cmakedefine HAS_A
#cmakedefine HAS_B
#cmakedefine HAS_C
#define STRING_A "@STRING_A@"
#define STRING_B "@STRING_B@"


I think you could do this pretty easily in a function, and a command 
would not be needed.   Anyway, does the API look good?

-Bill


More information about the CMake mailing list