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