Re: [CMake] Touching files on cache var changes

2011-05-18 Thread Michael Hertling
On 05/17/2011 07:46 PM, David Cole wrote:
> On Tue, May 17, 2011 at 1:30 PM, Michael Hertling wrote:
> 
>> On 05/17/2011 05:45 PM, Robert Bielik wrote:
>>> Hi all,
>>>
>>> I'm wondering if there's a way to touch files on cached var changes.
>> Let's say I have an option to enable or disable a feature
>>> in my application, and depending on its setting a preprocessor macro is
>> defined (or not defined) in the CMakeLists.txt file:
>>>
>>> OPTION(FEATURE_X "Check to enable feature X" OFF)
>>>
>>> IF(FEATURE_X)
>>> ADD_DEFINITIONS(-DUSE_FEATURE_X=1)
>>> ELSE(FEATURE_X)
>>> ADD_DEFINITIONS(-DUSE_FEATURE_X=0)
>>> ENDIF(FEATURE_X)
>>>
>>> and in "features.c":
>>>
>>> ...
>>> #if USE_FEATURE_X
>>> // Code for feature X
>>>
>>> #endif
>>> ...
>>>
>>> The source code file "features.c" that have code depending on the
>> preprocessor macro needs to be recompiled each time the option changes,
>> which does not automatically
>>> happen if the macro is defined like above (and I _really_ need to have it
>> defined, either to zero or one...).
>>>
>>> So I pretty much need to hook a dependency of "features.c" to change of
>> cached cmake options/vars...
>>>
>>> Ideas?
>>> TIA
>>> /Rob
>>
>> AFAICS, with 2.8.4, the concerned files *are* recompiled:
>>
>> # CMakeLists.txt:
>> CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4 FATAL_ERROR)
>> PROJECT(RECOMPILE C)
>> SET(CMAKE_VERBOSE_MAKEFILE ON)
>> OPTION(FEATURE_X "Check to enable feature X" OFF)
>> IF(FEATURE_X)
>> ADD_DEFINITIONS(-DUSE_FEATURE_X=1)
>> ELSE(FEATURE_X)
>> ADD_DEFINITIONS(-DUSE_FEATURE_X=0)
>> ENDIF(FEATURE_X)
>> ADD_EXECUTABLE(main main.c)
>>
>> /* main.c: */
>> int main(void){return 0;}
>>
>> After reconfiguring the project with an altered FEATURE_X value,
>> you will see main.c being recompiled. This is due to the line
>>
>> CMakeFiles/main.dir/main.c.o: CMakeFiles/main.dir/flags.make
>>
>> in ${CMAKE_BINARY_DIR}/CMakeFiles/main.dir/build.make with the
>> ${CMAKE_BINARY_DIR}/CMakeFiles/main.dir/flags.make containing:
>>
>> C_DEFINES = -DUSE_FEATURE_X=...
>>
>> It's this latter file which is modified when the preprocessor
>> definitions change, and the object file's dependency provides
>> for the recompilation. Can you confirm that?
>>
>> Regards,
>>
>> Michael
> 
> That works with makefile generators, but we trust Visual Studio and Xcode to
> do their own dependency analysis, and with those generators, I don't think
> that the main.c will be recompiled after changing the FEATURE_X value in
> CMake...

Ahh, thanks for this hint! Indeed, with VS, nothing happens. :-(

Regards,

Michael

> However, if you use a configured header file, then it will.
> 
> HTH,
> David
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] Touching files on cache var changes

2011-05-17 Thread David Cole
On Tue, May 17, 2011 at 1:30 PM, Michael Hertling wrote:

> On 05/17/2011 05:45 PM, Robert Bielik wrote:
> > Hi all,
> >
> > I'm wondering if there's a way to touch files on cached var changes.
> Let's say I have an option to enable or disable a feature
> > in my application, and depending on its setting a preprocessor macro is
> defined (or not defined) in the CMakeLists.txt file:
> >
> > OPTION(FEATURE_X "Check to enable feature X" OFF)
> >
> > IF(FEATURE_X)
> > ADD_DEFINITIONS(-DUSE_FEATURE_X=1)
> > ELSE(FEATURE_X)
> > ADD_DEFINITIONS(-DUSE_FEATURE_X=0)
> > ENDIF(FEATURE_X)
> >
> > and in "features.c":
> >
> > ...
> > #if USE_FEATURE_X
> > // Code for feature X
> >
> > #endif
> > ...
> >
> > The source code file "features.c" that have code depending on the
> preprocessor macro needs to be recompiled each time the option changes,
> which does not automatically
> > happen if the macro is defined like above (and I _really_ need to have it
> defined, either to zero or one...).
> >
> > So I pretty much need to hook a dependency of "features.c" to change of
> cached cmake options/vars...
> >
> > Ideas?
> > TIA
> > /Rob
>
> AFAICS, with 2.8.4, the concerned files *are* recompiled:
>
> # CMakeLists.txt:
> CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4 FATAL_ERROR)
> PROJECT(RECOMPILE C)
> SET(CMAKE_VERBOSE_MAKEFILE ON)
> OPTION(FEATURE_X "Check to enable feature X" OFF)
> IF(FEATURE_X)
> ADD_DEFINITIONS(-DUSE_FEATURE_X=1)
> ELSE(FEATURE_X)
> ADD_DEFINITIONS(-DUSE_FEATURE_X=0)
> ENDIF(FEATURE_X)
> ADD_EXECUTABLE(main main.c)
>
> /* main.c: */
> int main(void){return 0;}
>
> After reconfiguring the project with an altered FEATURE_X value,
> you will see main.c being recompiled. This is due to the line
>
> CMakeFiles/main.dir/main.c.o: CMakeFiles/main.dir/flags.make
>
> in ${CMAKE_BINARY_DIR}/CMakeFiles/main.dir/build.make with the
> ${CMAKE_BINARY_DIR}/CMakeFiles/main.dir/flags.make containing:
>
> C_DEFINES = -DUSE_FEATURE_X=...
>
> It's this latter file which is modified when the preprocessor
> definitions change, and the object file's dependency provides
> for the recompilation. Can you confirm that?
>
> Regards,
>
> Michael
> ___
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>


That works with makefile generators, but we trust Visual Studio and Xcode to
do their own dependency analysis, and with those generators, I don't think
that the main.c will be recompiled after changing the FEATURE_X value in
CMake...

However, if you use a configured header file, then it will.

HTH,
David
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Re: [CMake] Touching files on cache var changes

2011-05-17 Thread Michael Hertling
On 05/17/2011 05:45 PM, Robert Bielik wrote:
> Hi all,
> 
> I'm wondering if there's a way to touch files on cached var changes. Let's 
> say I have an option to enable or disable a feature
> in my application, and depending on its setting a preprocessor macro is 
> defined (or not defined) in the CMakeLists.txt file:
> 
> OPTION(FEATURE_X "Check to enable feature X" OFF)
> 
> IF(FEATURE_X)
> ADD_DEFINITIONS(-DUSE_FEATURE_X=1)
> ELSE(FEATURE_X)
> ADD_DEFINITIONS(-DUSE_FEATURE_X=0)
> ENDIF(FEATURE_X)
> 
> and in "features.c":
> 
> ...
> #if USE_FEATURE_X
> // Code for feature X
> 
> #endif
> ...
> 
> The source code file "features.c" that have code depending on the 
> preprocessor macro needs to be recompiled each time the option changes, which 
> does not automatically
> happen if the macro is defined like above (and I _really_ need to have it 
> defined, either to zero or one...).
> 
> So I pretty much need to hook a dependency of "features.c" to change of 
> cached cmake options/vars...
> 
> Ideas?
> TIA
> /Rob

AFAICS, with 2.8.4, the concerned files *are* recompiled:

# CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4 FATAL_ERROR)
PROJECT(RECOMPILE C)
SET(CMAKE_VERBOSE_MAKEFILE ON)
OPTION(FEATURE_X "Check to enable feature X" OFF)
IF(FEATURE_X)
ADD_DEFINITIONS(-DUSE_FEATURE_X=1)
ELSE(FEATURE_X)
ADD_DEFINITIONS(-DUSE_FEATURE_X=0)
ENDIF(FEATURE_X)
ADD_EXECUTABLE(main main.c)

/* main.c: */
int main(void){return 0;}

After reconfiguring the project with an altered FEATURE_X value,
you will see main.c being recompiled. This is due to the line

CMakeFiles/main.dir/main.c.o: CMakeFiles/main.dir/flags.make

in ${CMAKE_BINARY_DIR}/CMakeFiles/main.dir/build.make with the
${CMAKE_BINARY_DIR}/CMakeFiles/main.dir/flags.make containing:

C_DEFINES = -DUSE_FEATURE_X=...

It's this latter file which is modified when the preprocessor
definitions change, and the object file's dependency provides
for the recompilation. Can you confirm that?

Regards,

Michael
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] Touching files on cache var changes

2011-05-17 Thread David Cole
I do this by making a .in file that gets configured that contains the value
of the CMake variable.

header.h.in:
===
#define FEATURE_X @FEATURE_X@

CMakeLists.txt:
===
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/header.h.in
  ${CMAKE_CURRENT_BINARY_DIR}/header.h
  @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR})

features.c:
===
#include "header.h"

Now, when FEATURE_X changes in cmake, header.h changes, which triggers a
re-compile of any files that include it.


HTH,
David


On Tue, May 17, 2011 at 11:45 AM, Robert Bielik wrote:

> Hi all,
>
> I'm wondering if there's a way to touch files on cached var changes. Let's
> say I have an option to enable or disable a feature
> in my application, and depending on its setting a preprocessor macro is
> defined (or not defined) in the CMakeLists.txt file:
>
> OPTION(FEATURE_X "Check to enable feature X" OFF)
>
> IF(FEATURE_X)
> ADD_DEFINITIONS(-DUSE_FEATURE_X=1)
> ELSE(FEATURE_X)
> ADD_DEFINITIONS(-DUSE_FEATURE_X=0)
> ENDIF(FEATURE_X)
>
> and in "features.c":
>
> ...
> #if USE_FEATURE_X
> // Code for feature X
>
> #endif
> ...
>
> The source code file "features.c" that have code depending on the
> preprocessor macro needs to be recompiled each time the option changes,
> which does not automatically
> happen if the macro is defined like above (and I _really_ need to have it
> defined, either to zero or one...).
>
> So I pretty much need to hook a dependency of "features.c" to change of
> cached cmake options/vars...
>
> Ideas?
> TIA
> /Rob
> ___
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake