I have a /boot subdirectory. It contains chicken-boot and csi-boot targets, specified with ADD_EXECUTABLE. I want to copy a few extra files and create an overall "boot" target. If I do this in the CMakeLists.txt in the subdirectory it fails:

ADD_CUSTOM_TARGET(boot
 DEPENDS
 chicken-boot
 csi-boot
 ${CMAKE_CURRENT_BINARY_DIR}/chicken.h
 ${CMAKE_CURRENT_BINARY_DIR}/chicken-ffi-macros.scm
 ${CMAKE_CURRENT_BINARY_DIR}/chicken-more-macros.scm
)

$ make boot
make[3]: *** No rule to make target `boot/chicken-boot.exe', needed by `boot'. Stop.
make[2]: *** [boot/CMakeFiles/boot.dir/all] Error 2
make[1]: *** [boot/CMakeFiles/boot.dir/rule] Error 2
make: *** [boot] Error 2

If I qualify the pathnames it still fails:

ADD_CUSTOM_TARGET(boot
 DEPENDS
 ${CMAKE_CURRENT_BINARY_DIR}/chicken-boot
 ${CMAKE_CURRENT_BINARY_DIR}/csi-boot
 ${CMAKE_CURRENT_BINARY_DIR}/chicken.h
 ${CMAKE_CURRENT_BINARY_DIR}/chicken-ffi-macros.scm
 ${CMAKE_CURRENT_BINARY_DIR}/chicken-more-macros.scm
)

$ make boot
make[3]: *** No rule to make target `boot/chicken-boot.exe', needed by `boot'. Stop.
make[2]: *** [boot/CMakeFiles/boot.dir/all] Error 2
make[1]: *** [boot/CMakeFiles/boot.dir/rule] Error 2
make: *** [boot] Error 2

But if I use ADD_DEPENDENCIES for the toplevel targets, it works just fine:

ADD_CUSTOM_TARGET(boot
 DEPENDS
 ${CMAKE_CURRENT_BINARY_DIR}/chicken.h
 ${CMAKE_CURRENT_BINARY_DIR}/chicken-ffi-macros.scm
 ${CMAKE_CURRENT_BINARY_DIR}/chicken-more-macros.scm
)
ADD_DEPENDENCIES(boot chicken-boot csi-boot)

$ make boot
Generating eval.c, eval.exports

In a toplevel target, I think it's reasonable to expect DEPENDS to handle all dependencies, not just file-level dependencies.


Cheers,
Brandon Van Every

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

Reply via email to