Le 28 nov. 07 à 17:35, Gaëtan Lehmann a écrit :


Hi,

I'm currently trying to build a project organized in subdirectories. In all the subdirectories, several files are generated at build time (with an ADD_CUSTOM_COMMAND). In all the directories, a custom target depending on all the files generated in the subdirectory is created with ADD_CUSTOM_TARGET, so it should be easy to declare a dependancy on all those files in another subdirectory.

During the build, things are all right until "make" try to build a file which depends on a custom target from another subdirectory. Here is an example:

[EMAIL PROTECTED] build]$ LC_ALL=C make BaseSwig
[  0%] Built target VXLNumericsIdx
make[3]: *** No rule to make target `VXLNumericsIdx', needed by `ClassIndex/wrap_ITKCommonBase.i'. Stop.
make[2]: *** [Modules/Base/CMakeFiles/BaseSwig.dir/all] Error 2
make[1]: *** [Modules/Base/CMakeFiles/BaseSwig.dir/rule] Error 2
make: *** [BaseSwig] Error 2

VXLNumericsIdx is defined in one subdir, and BaseSwig in another on. "make" reports that the custom target "VXLNumericsIdx" is built (that's true), but the line after, it say it can't find that target.
It seems definitively strange to me!

I'm using cmake cvs 2007-10-24, and have seen the same behavior with cmake 2.4.5

Any idea about what can be wrong?


I've just find my mistake, which has nothing to do with subdirectories, but which don't fully explain the cmake behavior though: I was trying to add the dependency to the custom target with the DEPENDS option of ADD_CUSTOM_COMMAND, while I should have used ADD_DEPENDENCIES (this one works fine). However, it's strange that, with the DEPENDS option, the target is built. IMHO, it would be less confusing if the custom target would not be built at all, instead of giving a quite inconsistent error message.

Here is a short CMakeLists.txt to reproduce that behavior:

  PROJECT(toto)
  ADD_CUSTOM_TARGET(CustomTarget)
  ADD_CUSTOM_COMMAND(
   OUTPUT output
   COMMAND touch output
   DEPENDS CustomTarget
  )
  ADD_CUSTOM_TARGET(CustomCommand DEPENDS output)


and run "make CustomCommand".


For the next ones with that problem, the right way to do things is:

  PROJECT(toto)
  ADD_CUSTOM_TARGET(CustomTarget)
  ADD_CUSTOM_COMMAND(
   OUTPUT output
   COMMAND touch output
  )
  ADD_CUSTOM_TARGET(CustomCommand DEPENDS output)
  ADD_DEPENDENCIES(CustomCommand CustomTarget)

Gaëtan


--
Gaëtan Lehmann
Biologie du Développement et de la Reproduction
INRA de Jouy-en-Josas (France)
tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
http://voxel.jouy.inra.fr




Attachment: PGP.sig
Description: Ceci est une signature électronique PGP

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to