<div dir="ltr"><div class="gmail_default" style="font-family:courier new,monospace">When I change a header file for a library, and then do a "make" in the build directory, only source (C++) files which directly include that header get rebuilt, but those which use it indirectly do not.  But when I link to the library, the other files do get rebuilt.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">Example:</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">lib/mod.cpp</div><div class="gmail_default" style="font-family:courier new,monospace">lib/mod2.cpp</div><div class="gmail_default" style="font-family:courier new,monospace">lib/mod3.cpp</div><div class="gmail_default" style="font-family:courier new,monospace">lib/lib/mod.h</div><div class="gmail_default" style="font-family:courier new,monospace">lib/lib/mod2.h</div><div class="gmail_default" style="font-family:courier new,monospace">lib/lib/mod3.h</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">mod1.h:</div><div class="gmail_default" style="font-family:courier new,monospace">class mod {</div><div class="gmail_default" style="font-family:courier new,monospace">};</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">mod2.h:</div><div class="gmail_default" style="font-family:courier new,monospace">#include "lib/mod1.h"</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">class mod2 : public mod1 {</div><div class="gmail_default" style="font-family:courier new,monospace">};</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">mod.cpp</div><div class="gmail_default" style="font-family:courier new,monospace">#include "lib/mod.h"</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">mod2.cpp:</div><div class="gmail_default" style="font-family:courier new,monospace">#include "lib/mod2.h"</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">// etc.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">So mod.h contains the base class, and mod2.h and mod3.h contain derived classes.  Changing mod.h requires all of the example source files above to be recompiled to be correct, but "make" in the lib directory only recompiles mod.cpp.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">If I have a program elsewhere which references this library, doing a "make" in its build directory causes dependency checks and results in mod2.cpp and mod3.cpp being recompiled as well as mod.cpp.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">The depend.mak and depend.internal files correctly list mod.h as being in the dependencies for mod2.o and mod3.o, but those rules don't appear to get used.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">Is this expected behavior?  Is there some way to change it to cause a "make" in the lib directory to compile all files dependent on the header, even if transitively (correct word?)?</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">Thanks.  This is really throwing our developers for a loop as we transition from home-grown make to CMake.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">..chris</div></div>