We're looking to use cmake on a project which has some dependencies which are 
not properly picked up by cmake's dependency scanner. I'm not looking to fix 
the scanner, because I feel the scanner is fundamentally broken:

In order to properly scan a file for dependencies, you need to either use the 
compiler specific dependency scanner [1][2], or implement a fully featured c 
preprocessor. You can't do a partial job like the current dependency scanner 
does. I'd encourage you to read "Recursive Make Considered Harmful" [3] which 
discusses the importance of creating correct dependency graphs (with neither 
missing, nor erroneous dependencies). I'll provide a few examples of where 
cmake's method is lacking:

1. #define ARCH x86
   #define ASM_INCLUDE <ARCH/asm.h>
   #include ASM_INCLUDE
   cmake adds a dependency on ASM_INCLUDE instead of x86/asm.h

2. #ifdef DEBUG
   #include <debug_config.h>
   #else
   #include <config.h>
   #endif
   cmake adds a dependency on both debug_config.h and config.h
   In a worst-case scenario here (one which our project has), this could 
generate circular dependencies which cause the build to fail.

3. #if 0
   #include <nonexistantfile.h>
   #endif
   cmake adds a dependency on nonexistantfile.h when it shouldn't have

My suggestion for a solution to this problem is to use the compiler specific 
dependency generation methods. This could be done cleanly by converting 
dependency generation into a plugin based system with plugins for all the 
supported compilers.

I would have (tried to) made these changes to cmake already, but since this is 
both a non-trivial change and an architectural change, I felt it necessary to 
get an ok from you before I changed anything. I'm not really willing to do the 
work if it won't be accepted upstream (and I'm not willing to use cmake if this 
doesn't get fixed).

Thanks for your time
Russell Harmon

[1] 
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Preprocessor-Options.html#index-dependencies_002c-make-867
[2] http://msdn.microsoft.com/en-us/library/hdkef6tk.aspx
[3] http://aegis.sourceforge.net/auug97.pdf
_______________________________________________
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

Reply via email to