On 12/12/2011 08:42 PM, Jos van den Oever wrote: > I'm trying to get get CMake to do the equivalent from this Makefile. I'm > using > cp in this simple example, but want to use different commands in my project. > > ==Makefile== > srcdir=.. > > hij: a/efg > cp a/efg hij > a/efg: $(srcdir)/a/abc > -mkdir a > cp $(srcdir)/a/abc a/efg > ========== > > For this I am using two CMakeLists.txt files. > > ==CMakeLists.txt== > cmake_minimum_required(VERSION 2.8) > add_subdirectory(a) > add_custom_command( > OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/hij > COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different > ${CMAKE_CURRENT_BINARY_DIR}/a/efg > ${CMAKE_CURRENT_BINARY_DIR}/hij > DEPENDS > ${CMAKE_CURRENT_BINARY_DIR}/a/efg > VERBATIM > ) > add_custom_target(hij_target ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/hij) > ================== > ==a/CMakeLists.txt== > add_custom_command( > OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/efg > COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different > ${CMAKE_CURRENT_SOURCE_DIR}/abc > ${CMAKE_CURRENT_BINARY_DIR}/efg > DEPENDS > ${CMAKE_CURRENT_SOURCE_DIR}/abc > VERBATIM > ) > ==================== > > This gives me the error: > > make[2]: *** No rule to make target `a/efg', needed by `hij'. Stop. > make[1]: *** [CMakeFiles/hij_target.dir/all] Error 2 > make: *** [all] Error 2 > > How can cmake be made to understand this simple dependency? > > Cheers, > Jos
OUTPUT-style custom commands must be triggered by an {executable, library,custom} target from within the *same* CMakeLists.txt file; refer to the documentation for more information. Thus, you need an ADD_CUSTOM_TARGET(efg_target ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/efg) or the like in a/CMakeLists.txt and an ADD_DEPENDENCIES(hij_target efg_target) somewhere, preferably in your top-level CMakeLists.txt after the ADD_SUBDIRECTORY() and ADD_CUSTOM_TARGET() commands. Finally, the DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/a/efg clause in the custom command for ${CMAKE_CURRENT_BINARY_DIR}/hij is pointless since ${CMAKE_CURRENT_BINARY_DIR}/a/efg isn't generated by a custom command in the same CMakeLists.txt file. Regards, Michael -- 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