[CMake] Can imported libraries depend on ExternalProject targets?

Kent Williams nkwmailinglists at gmail.com
Tue Jun 26 10:33:13 EDT 2012


That seems like it should work, but it actually does not.

There's two types of precedence in CMake.

1. Textual -- as CMake munches through a project and its subdirectory,
it generates a build system where the build order is the same as the
textual order.  In a single process build, for example:

project(x)
add_library(xlib ...)
add_executable(xexec ...)

'xlib' will get built before 'xexec'

2. The dependency graph.  Targets which do not depend on any other
target get built first, then targets that depend on the 'leaf'
targets.  In the example above, adding

target_link_libraries(xexec xlib)

will make 'xexec' depend on 'xlib', and even if you build using more
than one process (i.e. make -j 8), xexec will be built after xlib.

I've verified that the approach you use below doesn't work, because
imported libraries are targets to which you can add dependencies.  I
tried this approach and it didn't work -- in fact that is what my
original e-mail is about.

David Cole indicated in essence, I was doing it wrong.  My position is
that it's the only way to do it without completely revamping the ITK
build system, which is above my pay grade.

I thought of a sneaky workaround:  Create a dummy library, with one
object file that does nothing, and will never actually be loaded.
Make the dummy library depend on the ExternalProject target, and add
it to library list along with the ExternalProject's libraries.

But that seems kind of ugly, creating a library no program actually needs.

On Sat, Jun 23, 2012 at 9:06 AM, Stefan Reuschl <lists at stefanreuschl.de> wrote:
>
> The following once worked fine for me using CMake 2.8.8:
>
> ExternalProject_Add( ep )
> add_library( epLib IMPORTED )
> set_target_properties( epLib PROPERTIES IMPORTED_LOCATION ... )
> add_dependencies( epLib ep )
>


More information about the CMake mailing list