[CMake] Depending on all and custom targets
Hello again, I have some targets that are not build by default (using EXCLUDE_FROM_ALL), these are build when a special target called extras. Now I want to add a target that builds both all and extras, but cant seem to get it to work. For discussion I have these rules: PROJECT (tester) CMAKE_MINIMUM_REQUIRED (VERSION 2.6) CMAKE_POLICY (VERSION 2.6) add_executable(foo foo.c ) add_executable(bar bar.c ) set_target_properties(bar PROPERTIES EXCLUDE_FROM_ALL True ) add_custom_target(extras DEPENDS bar ) which builds foo when running make all and bar when make extras I have tried to simply add: add_custom_target(complete DEPENDS extras all ) which gives the following error: $ make complete [100%] Built target bar [100%] Built target extras make[3]: *** No rule to make target `extras', needed by `CMakeFiles/complete'. Stop. make[2]: *** [CMakeFiles/complete.dir/all] Error 2 make[1]: *** [CMakeFiles/complete.dir/rule] Error 2 make: *** [complete] Error 2 When removing extras from the DEPENDS line I get: $ make complete make[3]: *** No rule to make target `all', needed by `CMakeFiles/complete'. Stop. make[2]: *** [CMakeFiles/complete.dir/all] Error 2 make[1]: *** [CMakeFiles/complete.dir/rule] Error 2 make: *** [complete] Error 2 I get the impression that I have two problems: depending on a custom_target and depending on all. Anyone know of a solution? I'm running cmake version 2.6-patch 2 with make 3.81on a ubuntu 9.04 box (all installed from ubuntu standard repositories) Best regards and happy weekend /jp -- jens persson j...@persson.cx Mäster Olofsväg 24 S-224 66 LUND;SWEDEN ___ 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
Re: [CMake] Depending on all and custom targets
2009/10/9 jens persson j...@persson.cx: add_custom_target(extras DEPENDS bar ) which builds foo when running make all and bar when make extras I have tried to simply add: add_custom_target(complete DEPENDS extras all ) which gives the following error: [...] I get the impression that I have two problems: depending on a custom_target and depending on all. Dependency from builtin target is currently unsupported. see: http://public.kitware.com/Bug/view.php?id=8438 I think dependency from extras should work did you try with only extras and not all? -- Erk Membre de l'April - « promouvoir et défendre le logiciel libre » - http://www.april.org ___ 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
Re: [CMake] Depending on all and custom targets
2009/10/9 Eric Noulard eric.noul...@gmail.com: 2009/10/9 jens persson j...@persson.cx: I get the impression that I have two problems: depending on a custom_target and depending on all. Dependency from builtin target is currently unsupported. see: http://public.kitware.com/Bug/view.php?id=8438 OK, that settled then, I'll create my on taget my_all or something like that then :-) I think dependency from extras should work did you try with only extras and not all? Yes I get the following error: $ make complete [100%] Built target bar [100%] Built target extras make[3]: *** No rule to make target `extras', needed by `CMakeFiles/complete'. Stop. make[2]: *** [CMakeFiles/complete.dir/all] Error 2 make[1]: *** [CMakeFiles/complete.dir/rule] Error 2 make: *** [complete] Error 2 With this CMakeLists.txt file: PROJECT (tester) CMAKE_MINIMUM_REQUIRED (VERSION 2.6) CMAKE_POLICY (VERSION 2.6) add_executable(bar bar.c ) add_custom_target(extras DEPENDS bar ) add_custom_target(complete DEPENDS extras ) I've tried to look into the makefiles but could not find the solution. I have included the verbose output of make at the end of this mail It seems that the file CMakeFiles/complete.dir/build.make references the extras target that is defined in CMakeFiles/extras.dir/build.make Probably a bug. Will report it later. /jp $ VERBOSE=1 make complete /usr/bin/cmake -H/home/sejenpe/tmp/cmake-tester/complete -B/home/sejenpe/tmp/cmake-tester/complete --check-build-system CMakeFiles/Makefile.cmake 0 make -f CMakeFiles/Makefile2 complete make[1]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' /usr/bin/cmake -H/home/sejenpe/tmp/cmake-tester/complete -B/home/sejenpe/tmp/cmake-tester/complete --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles 1 make -f CMakeFiles/Makefile2 CMakeFiles/complete.dir/all make[2]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' make -f CMakeFiles/bar.dir/build.make CMakeFiles/bar.dir/depend make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' cd /home/sejenpe/tmp/cmake-tester/complete /usr/bin/cmake -E cmake_depends Unix Makefiles /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles/bar.dir/DependInfo.cmake --color= make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make -f CMakeFiles/bar.dir/build.make CMakeFiles/bar.dir/build make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' make[3]: Nothing to be done for `CMakeFiles/bar.dir/build'. make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' /usr/bin/cmake -E cmake_progress_report /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles 1 [100%] Built target bar make -f CMakeFiles/extras.dir/build.make CMakeFiles/extras.dir/depend make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' cd /home/sejenpe/tmp/cmake-tester/complete /usr/bin/cmake -E cmake_depends Unix Makefiles /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles/extras.dir/DependInfo.cmake --color= make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make -f CMakeFiles/extras.dir/build.make CMakeFiles/extras.dir/build make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' make[3]: Nothing to be done for `CMakeFiles/extras.dir/build'. make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' /usr/bin/cmake -E cmake_progress_report /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles [100%] Built target extras make -f CMakeFiles/complete.dir/build.make CMakeFiles/complete.dir/depend make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' cd /home/sejenpe/tmp/cmake-tester/complete /usr/bin/cmake -E cmake_depends Unix Makefiles /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles/complete.dir/DependInfo.cmake --color= make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make -f CMakeFiles/complete.dir/build.make CMakeFiles/complete.dir/build make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' make[3]: *** No rule to make target `extras', needed by `CMakeFiles/complete'. Stop. make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make[2]: *** [CMakeFiles/complete.dir/all] Error 2 make[2]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make[1]: *** [CMakeFiles/complete.dir/rule] Error 2 make[1]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make: *** [complete] Error 2
Re: [CMake] Depending on all and custom targets
2009/10/9 jens persson j...@persson.cx: I think dependency from extras should work did you try with only extras and not all? Yes I get the following error: $ make complete [100%] Built target bar [100%] Built target extras make[3]: *** No rule to make target `extras', needed by `CMakeFiles/complete'. Stop. make[2]: *** [CMakeFiles/complete.dir/all] Error 2 make[1]: *** [CMakeFiles/complete.dir/rule] Error 2 make: *** [complete] Error 2 With this CMakeLists.txt file: PROJECT (tester) CMAKE_MINIMUM_REQUIRED (VERSION 2.6) CMAKE_POLICY (VERSION 2.6) add_executable(bar bar.c ) add_custom_target(extras DEPENDS bar ) add_custom_target(complete DEPENDS extras ) I've tried to look into the makefiles but could not find the solution. Better look in to the documentation first :-) From cmake --help-command add_custom_target Dependencies listed with the DEPENDS argument may reference files and outputs of custom commands created with ADD_CUSTOM_COMMAND. the DEPENDS argument of ADD_CUSTOM_TARGET is here to cope with the fact that CMake cannot compute dependency precisely because it's a CUSTOM target whose input is unknown to CMake. thus you cannot use that to specify top-level target dependencies. You should use add_dependencies for that. Working CMakeLists.txt should looks like: PROJECT (tester) CMAKE_MINIMUM_REQUIRED (VERSION 2.6) CMAKE_POLICY (VERSION 2.6) add_executable(bar bar.c ) add_custom_target(extras) add_dependencies(extras bar) add_custom_target(complete) add_dependencies(complete extras) Probably a bug. Will report it later. Finally I don't think this is a bug. -- Erk Membre de l'April - « promouvoir et défendre le logiciel libre » - http://www.april.org ___ 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
Re: [CMake] Depending on all and custom targets
Hi Jens, It's not a bug. Quoting from the docs for add_custom_target: Dependencies listed with the DEPENDS argument may reference files and outputs of custom commands created with ADD_CUSTOM_COMMAND. The problem is that your target 'extras' doesn't create any files. By saying add_custom_target(complete DEPENDS extras) you're telling CMake that target 'complete' depends on the _file_ 'extras'. The correct way to do this is to use add_dependencies: add_custom_target(complete) add_dependencies(complete extras) HTH, Marcel Loose. On Fri, 2009-10-09 at 12:47 +0200, jens persson wrote: 2009/10/9 Eric Noulard eric.noul...@gmail.com: 2009/10/9 jens persson j...@persson.cx: I get the impression that I have two problems: depending on a custom_target and depending on all. Dependency from builtin target is currently unsupported. see: http://public.kitware.com/Bug/view.php?id=8438 OK, that settled then, I'll create my on taget my_all or something like that then :-) I think dependency from extras should work did you try with only extras and not all? Yes I get the following error: $ make complete [100%] Built target bar [100%] Built target extras make[3]: *** No rule to make target `extras', needed by `CMakeFiles/complete'. Stop. make[2]: *** [CMakeFiles/complete.dir/all] Error 2 make[1]: *** [CMakeFiles/complete.dir/rule] Error 2 make: *** [complete] Error 2 With this CMakeLists.txt file: PROJECT (tester) CMAKE_MINIMUM_REQUIRED (VERSION 2.6) CMAKE_POLICY (VERSION 2.6) add_executable(bar bar.c ) add_custom_target(extras DEPENDS bar ) add_custom_target(complete DEPENDS extras ) I've tried to look into the makefiles but could not find the solution. I have included the verbose output of make at the end of this mail It seems that the file CMakeFiles/complete.dir/build.make references the extras target that is defined in CMakeFiles/extras.dir/build.make Probably a bug. Will report it later. /jp $ VERBOSE=1 make complete /usr/bin/cmake -H/home/sejenpe/tmp/cmake-tester/complete -B/home/sejenpe/tmp/cmake-tester/complete --check-build-system CMakeFiles/Makefile.cmake 0 make -f CMakeFiles/Makefile2 complete make[1]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' /usr/bin/cmake -H/home/sejenpe/tmp/cmake-tester/complete -B/home/sejenpe/tmp/cmake-tester/complete --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles 1 make -f CMakeFiles/Makefile2 CMakeFiles/complete.dir/all make[2]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' make -f CMakeFiles/bar.dir/build.make CMakeFiles/bar.dir/depend make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' cd /home/sejenpe/tmp/cmake-tester/complete /usr/bin/cmake -E cmake_depends Unix Makefiles /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles/bar.dir/DependInfo.cmake --color= make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make -f CMakeFiles/bar.dir/build.make CMakeFiles/bar.dir/build make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' make[3]: Nothing to be done for `CMakeFiles/bar.dir/build'. make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' /usr/bin/cmake -E cmake_progress_report /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles 1 [100%] Built target bar make -f CMakeFiles/extras.dir/build.make CMakeFiles/extras.dir/depend make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' cd /home/sejenpe/tmp/cmake-tester/complete /usr/bin/cmake -E cmake_depends Unix Makefiles /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles/extras.dir/DependInfo.cmake --color= make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' make -f CMakeFiles/extras.dir/build.make CMakeFiles/extras.dir/build make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' make[3]: Nothing to be done for `CMakeFiles/extras.dir/build'. make[3]: Leaving directory `/home/sejenpe/tmp/cmake-tester/complete' /usr/bin/cmake -E cmake_progress_report /home/sejenpe/tmp/cmake-tester/complete/CMakeFiles [100%] Built target extras make -f CMakeFiles/complete.dir/build.make CMakeFiles/complete.dir/depend make[3]: Entering directory `/home/sejenpe/tmp/cmake-tester/complete' cd /home/sejenpe/tmp/cmake-tester/complete /usr/bin/cmake -E cmake_depends Unix Makefiles /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete /home/sejenpe/tmp/cmake-tester/complete