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