Brad King wrote: > On 11/22/2011 9:31 AM, Stephen Kelly wrote: >>> CMake Error: INSTALL(EXPORT "twoDeps" ...) includes target "libtwo" >>> which requires target "libone" that is not in the export set. >>> >>> How can we resolve this? >> >> http://public.kitware.com/Bug/view.php?id=12588 >> >> Brad asked to bring this up on the list for discussion. > > Additional CMake development is needed to support this. We need to > introduce the notion of multiple dependent install(EXPORT) sets. > > I think the commands will look something like this: > > add_library(A ...) > add_library(B ...) > target_link_libraries(B A) > install(TARGETS A ... EXPORT ExportA) > install(TARGETS B ... EXPORT ExportB) > install(EXPORT ExportA ...) > install(EXPORT ExportB DEPENDS ExportA ...) > > The "DEPENDS ExportA" option to install(EXPORT) on the last line will need > to > be added and implemented. We will have to require that the > install(EXPORT) > commands be invoked in dependency order (ex. A before B). That way when > the command installing ExportB is writing library B's dependency on A, it > can transform the name using the options that had been given to the > install > command for ExportA, such as its NAMESPACE. Furthermore, the targets file > generated for ExportB will need to include() the file generated for > ExportA using the DESTINATION given to the latter to make its targets > available.
And its FILE presumably, but why? This ties in to the question of whether find_package(B) should find the dependencies of B: case 1: project(big_project) find_package(A) // Uses AConfig.cmake, which includes ATargets.cmake find_package(B) // Uses BConfig.cmake, which includes BTargets.cmake case 2: project(big_project) find_package(B) // Uses BConfig.cmake, which includes BTargets.cmake // and ATargets.cmake, but there was no find_package(A), // so this is broken anyway. case 3: project(big_project) find_package(B) // Uses BConfig.cmake, which runs find_package(A), // includes BTargets.cmake and ATargets.cmake, despite the // fact that, find_package(A) has the effect of including it // anyway. -- 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://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers