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