cmake problem: dependencies are not updated until make is re-run

Brad King brad.king at kitware.com
Tue May 23 16:06:08 CEST 2006


David Faure wrote:
> I have seen this problem multiple times, but I'm not sure something can be done about it...
> Basically the first time "make" is run, if it triggers a cmake run, then the new dependencies
> are not taken into account. They are only when running make again.
 >
> Example: branches/work/kdelibs4_snapshot was just updated with 2 weeks worth
> of trunk/KDE/kdelibs changes, including the renaming of the ksortablevaluelist.h header. Typing make gave:
> make[2]: *** No rule to make target `/d/kde/src/4/kdelibs4_snapshot/kdecore/ksortablevaluelist.h', needed by `kdeui/tests/CMakeFiles/kcomboboxtest.dir/kcomboboxtest.o'.  Stop.

Did this acutally cause CMake to run again?  Did you really run just 
"make" or perhaps a "make my-target"?

I just created a small project, built it, renamed a header, and built 
again and it worked.  There is something else going on here.

> Typing make again gave:
> [...]
> Dependee "/d/kde/src/4/kdelibs4_snapshot/kdecore/ksortablevaluelist.h" does not exist for depender "kdeui/tests/CMakeFiles/kcompletiontest.dir/kcompletioncoretest.o".
> [...]
> and this time there was no problem.

This looks like it ran cmake again and built correctly in the same make run.

> Is this a problem like "make launches cmake which regenerates makefiles but then make
> doesn't use the new makefiles"? iirc there are solutions to this problem in general but I forgot
> which, I think coolo knows more.

The basic makefile structure looks like this:

all: cmake_check_build_system
   ...recursive make to do real build...

cmake_check_build_system:
   ...run cmake to fix dependencies for missing headers...

The recursive make call makes sure the new makefiles are used whether or 
not make is smart enough to reload them.

-Brad


More information about the Kde-buildsystem mailing list