Re: [CMake] target dependency in subdirectory not found

2011-12-13 Thread Michael Hertling
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


[CMake] target dependency in subdirectory not found

2011-12-12 Thread Jos van den Oever
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

-- 
Jos van den Oever, software architect
+49 391 25 19 15 53
074 3491911
http://kogmbh.com/legal/
--

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