[CMake] Touching files on cache var changes

David Cole david.cole at kitware.com
Tue May 17 13:46:24 EDT 2011


On Tue, May 17, 2011 at 1:30 PM, Michael Hertling <mhertling at online.de>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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110517/97753419/attachment.htm>


More information about the CMake mailing list