Re: [CMake] ExternalProject_Add and Dependent Targets

2011-09-22 Thread Lori Pritchett-Sheats



David Cole wrote:

On Wed, Sep 21, 2011 at 11:45 AM, Lori Pritchett-Sheats
lpri...@lanl.gov wrote:
  

Reading the documentation it is not clear how the DEPENDS option works in
ExternalProject_Add.

For example, I add HDF5 to my build and HDF5 depends on zlib the following
doesn't work

find_package(ZLIB)
add_library(zlib UNKNOWN IMPORTED)
set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARY})

ExternalProject_Add(hdf5 DEPENDS zlib ..)

throws an error with the message 'No rule to make /zlib-done', needed by
external_projects/src/hdf5-stamp/hdf5-configure

For ExternalProject_Add, are the targets listed under the DEPENDS option
only targets that will be built with another ExternalProject_Add, not
existing libraries?




That's correct.

The first argument to ExternalProject_Add does become the name of a
custom target, though. So after the ExternalProject_Add call, you can
do:

ExternalProject_Add(hdf5 ...)

add_dependencies(hdf5 zlib)

However, in this particular case, you are finding an existing zlib and
then using an imported target to say where it is *for other
non-external project targets in the same CMake build*... For the
ExternalProject build of hdf5, you're going to have to pass down in
the location of zlib via some arguments, because the ExternalProject
build knows nothing about the context of what else is built in the
current CMake build...

So in this particular case, the hdf5 custom target does not actually
depend (in a build order sense) on the zlib target -- because the zlib
target doesn't build anything, it's just imported. So you don't
actually need the dependency... you just need to tell hdf5 where zlib
is.

Does that make sense?


HTH,
David

  


I think so. The HDF5 configuration has switch options to pass in the 
zlib include and library path, both are available once I call 
find_package(ZLIB). But if I'm building a library that depends on HDF5 I 
need to include the zlib target in the dependency definitions, correct?


If I'm understanding this correctly, after the ExternalProject_Add call, 
I need to define HDF5_INCLUDE_PATH, HDF5_LIBRARIES, since the project 
will not exist when CMake runs. Then when I create a library or 
executable that needs the HDF5 libraries for linking, I would do the 
following:


add_library(mylib ${some_source})
target_link_libraries(mylib ${HDF5_LIBRARIES} zlib)


--
Lori A. Pritchett-Sheats, PhD.
CCS-2, Computational Physics and Methods
Office: 505-665-6675
Fax: 505-665-4972

Los Alamos National Laboratory
P.O. Box 1663
MS D413
Los Alamos, NM 87544

--

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


Re: [CMake] ExternalProject_Add and Dependent Targets

2011-09-22 Thread David Cole
On Thu, Sep 22, 2011 at 10:13 AM, Lori Pritchett-Sheats
lpri...@lanl.gov wrote:


 David Cole wrote:

 On Wed, Sep 21, 2011 at 11:45 AM, Lori Pritchett-Sheats
 lpri...@lanl.gov wrote:


 Reading the documentation it is not clear how the DEPENDS option works in
 ExternalProject_Add.

 For example, I add HDF5 to my build and HDF5 depends on zlib the
 following
 doesn't work

 find_package(ZLIB)
 add_library(zlib UNKNOWN IMPORTED)
 set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARY})

 ExternalProject_Add(hdf5 DEPENDS zlib ..)

 throws an error with the message 'No rule to make /zlib-done', needed by
 external_projects/src/hdf5-stamp/hdf5-configure

 For ExternalProject_Add, are the targets listed under the DEPENDS option
 only targets that will be built with another ExternalProject_Add, not
 existing libraries?



 That's correct.

 The first argument to ExternalProject_Add does become the name of a
 custom target, though. So after the ExternalProject_Add call, you can
 do:

 ExternalProject_Add(hdf5 ...)

 add_dependencies(hdf5 zlib)

 However, in this particular case, you are finding an existing zlib and
 then using an imported target to say where it is *for other
 non-external project targets in the same CMake build*... For the
 ExternalProject build of hdf5, you're going to have to pass down in
 the location of zlib via some arguments, because the ExternalProject
 build knows nothing about the context of what else is built in the
 current CMake build...

 So in this particular case, the hdf5 custom target does not actually
 depend (in a build order sense) on the zlib target -- because the zlib
 target doesn't build anything, it's just imported. So you don't
 actually need the dependency... you just need to tell hdf5 where zlib
 is.

 Does that make sense?


 HTH,
 David



 I think so. The HDF5 configuration has switch options to pass in the zlib
 include and library path, both are available once I call find_package(ZLIB).
 But if I'm building a library that depends on HDF5 I need to include the
 zlib target in the dependency definitions, correct?

 If I'm understanding this correctly, after the ExternalProject_Add call, I
 need to define HDF5_INCLUDE_PATH, HDF5_LIBRARIES, since the project will not
 exist when CMake runs. Then when I create a library or executable that needs
 the HDF5 libraries for linking, I would do the following:

 add_library(mylib ${some_source})
 target_link_libraries(mylib ${HDF5_LIBRARIES} zlib)



That looks right to me. Let us know if you run into problems with it.

Thanks,
David
--

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


Re: [CMake] ExternalProject_Add and Dependent Targets

2011-09-21 Thread David Cole
On Wed, Sep 21, 2011 at 11:45 AM, Lori Pritchett-Sheats
lpri...@lanl.gov wrote:
 Reading the documentation it is not clear how the DEPENDS option works in
 ExternalProject_Add.

 For example, I add HDF5 to my build and HDF5 depends on zlib the following
 doesn't work

 find_package(ZLIB)
 add_library(zlib UNKNOWN IMPORTED)
 set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARY})

 ExternalProject_Add(hdf5 DEPENDS zlib ..)

 throws an error with the message 'No rule to make /zlib-done', needed by
 external_projects/src/hdf5-stamp/hdf5-configure

 For ExternalProject_Add, are the targets listed under the DEPENDS option
 only targets that will be built with another ExternalProject_Add, not
 existing libraries?


That's correct.

The first argument to ExternalProject_Add does become the name of a
custom target, though. So after the ExternalProject_Add call, you can
do:

ExternalProject_Add(hdf5 ...)

add_dependencies(hdf5 zlib)

However, in this particular case, you are finding an existing zlib and
then using an imported target to say where it is *for other
non-external project targets in the same CMake build*... For the
ExternalProject build of hdf5, you're going to have to pass down in
the location of zlib via some arguments, because the ExternalProject
build knows nothing about the context of what else is built in the
current CMake build...

So in this particular case, the hdf5 custom target does not actually
depend (in a build order sense) on the zlib target -- because the zlib
target doesn't build anything, it's just imported. So you don't
actually need the dependency... you just need to tell hdf5 where zlib
is.

Does that make sense?


HTH,
David




 --
 Lori A. Pritchett-Sheats, PhD.
 CCS-2, Computational Physics and Methods
 Office: 505-665-6675
 Fax: 505-665-4972

 Los Alamos National Laboratory
 P.O. Box 1663
 MS D413
 Los Alamos, NM 87544

 ___
 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

___
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