Michael Wild wrote:
On 25. Feb, 2009, at 7:25, Philip Lowman wrote:
When I invoke add_custom_target() in the
parent directory it causes an error in the makefiles.
To me this appears to be a bug in the Makefile generator. I also tried to make a "untarFoo" custom target in test/CMakeLists.txt, which depended on the output of the custom command and then have the "untar" target depend on "untarFoo", but that didn't work out either.

Custom commands are registered only in the directory where they appear.
When Philip points the DEPENDS of add_custom_target at a file, CMake looks
only at custom commands added in that directory for a rule.  Since it
doesn't find one it assumes that the user is referring to a file that will
be on disk by the time the custom target builds.  This isn't the case, so
make complains it can't find the file.

What works for me (CMake-CVS, Mac OS X 10.5, Makefile generator) is the following: - add an empty custom target "untar" with no dependencies to CMakeLists.txt BEFORE any of the add_subdirectory calls - in the test/CMakeLists.txt add a custom target "untarFoo" which depends on the output of the custom command - in the test/CMakeLists.txt add a dependency of the top-level "untar" target on the "untarFoo" helper target

This approach is correct, but could unfortunately create too many extra
targets that the user will see in IDE generators like VS and Xcode.  I
suggest instead doing all the untar rules in a single target defined in
one directory.  One can use the WORKING_DIRECTORY option to make each
rule execute in the proper directory.

Meanwhile, there are a few potential problems with the untar-in-source
approach in the first place:

  1.) The source tree might be read-only.  You can untar into the
      build tree and refer to things there.

  2.) Your example specifies a directory as the output of the custom
      command.  Since the directory timestamp gets updated by a
      variety of operations, the untar rule may not rerun reliably
      when the tarball changes.  I suggest making the extraction
      rule generate a stamp file with "cmake -E touch ...".

-Brad
_______________________________________________
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

Reply via email to