On Tue, May 17, 2011 at 1:30 PM, Michael Hertling <mhertl...@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
_______________________________________________ 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