Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

CMake mailing list question

By: a guest on Oct 3rd, 2012  |  syntax: None  |  size: 1.65 KB  |  views: 34  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Hi,
  2.  
  3. I'm having issues with the way CMake scans for dependencies.  It's causing unpredictable rebuilds of my project which means I need to run 'make' multiple times (until nothing rebuilds) before I can 'sudo make install'.
  4.  
  5. The project incorporates a code generator.  It parses all C++ header files and produces .h and .cpp files, which are then built into the main program.  The codegen and program both depend on a set of common utility files, which contain lines like this:
  6.  
  7. #ifndef CODEGEN
  8.   #include "GeneratedFile.h"
  9. #endif
  10.  
  11. From a compile standpoint, there is no problem -- the codegen is built with -DCODEGEN so it won't include the generated file, which of course wouldn't even exist on the first pass.  But since CMake doesn't preprocess headers, it creates a circular dependency situation, where the code generator "depends" on files which it generates.  This causes unnecessary rebuilds, since the code generator gets rebuilt after every time it regenerates files.
  12.  
  13. I thought I could create a dummy "GeneratedFile.h" in the directory containing the codegen files, and put this into the CMakeLists.txt in that directory:
  14. include_directories(
  15.   BEFORE
  16.   ${PROJECT_SOURCE_DIR}/src/codegen
  17. )
  18.  
  19. That seemed to work the first time -- if I looked at the codegen's depend.make file I saw lines like "SomeUtilityFile.cpp.o: ..../codegen/GeneratedFile.h" -- the dummy version of the file.
  20.  
  21. The problem is that CMake seems to have a global dependency cache, so once SomeUtilityFile.cpp gets built for the program, the dependency globally changes to the real GeneratedFile.h.
  22.  
  23. Any ideas to make this work, or other ways I can work around the problem?
  24.  
  25. Thank you
  26.  
  27. -dan