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