[CMake] triggering rebuild on windows

Michael Wild themiwi at gmail.com
Tue Sep 1 03:34:44 EDT 2009


On 1. Sep, 2009, at 4:12, j s wrote:

> According to Microsoft, the math macros are not part of standard C/C+ 
> +:
> http://msdn.microsoft.com/en-us/library/4hwaceh6(VS.80).aspx
>
> I'm not going to quibble with them on that point, as they were nice  
> enough
> to provided them with:
> _USE_MATH_DEFINES
>
> as an alternative.  The problem is the config.h approach is I now  
> have to
> include a config.h everywhere I want to use a math macro.  Even  
> worse is if
> I put all my platform dependent options in that file.  If I put an  
> unrelated
> macro change in that file, I just retriggered a rebuild for many  
> files not
> requiring a rebuild.    The potential for triggering unnecessary  
> rebuilds
> anytime that file is regenerated is just not worth it.
>
> I will quibble with Microsoft that Visual Studio does not detect  
> when the
> compilation options change.
>
> Regards,
>
> Juan
>
> On Mon, Aug 31, 2009 at 8:45 PM, Philip Lowman <philip at yhbt.com>  
> wrote:
>
>> On Mon, Aug 31, 2009 at 8:02 PM, j s <j.s4403 at gmail.com> wrote:
>>
>>> I am doing cross-platform compilation.  I don't want everything to
>>> recompile on all platforms.  That is a risk with having a  
>>> configuration
>>> header file.  If I remember correctly, cmake would ignore  
>>> conditional
>>> include guards when doing dependency scanning.  Therefore:
>>> #ifdef WIN32
>>> #include "config.hh"
>>> #endif
>>>
>>> would trigger a compilation on all platforms if config.hh changed.
>>>
>>> I want everything to recompile on Windows, but not on my linux  
>>> builds.
>>>
>>
>> I think when he meant a config file he meant one created by CMake
>> dynamically (which would only affect one build anyways).
>>
>> In other words:
>>
>> config.h.in:
>> #cmakedefine FOO
>>
>> CMakeLists.txt:
>> set(FOO true)
>> configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
>>                   ${CMAKE_CURRENT_BINARY_DIR}/config.h)
>> include_directories(${CMAKE_CURRENT_BINARY_DIR})
>>
>> config.h now includes "#define FOO 1"
>>
>>
>> Of course if all you need is the "unborkify MSVC so it supports  
>> math.h"
>> define then it's probably not worth it. :)
>>
>>
>> --
>> Philip Lowman
>>
>

How about doing it like this:

compat_math.h:
------>8------
#ifndef COMPAT_MATH_H
#define COMPAT_MATH_H

#ifdef WIN32
#define _USE_MATH_DEFINES 1
#endif

#include <math.h>

#endif
------<8------

And then replace all includes of math.h by compat_math.h. Of course,  
as soon as you 'touch' that file, you will trigger a lot of  
recompilations. But the effects can be reduced by only including  
compat_math.h in implementation files.

Michael


More information about the CMake mailing list