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