[CMake] Can imported libraries depend on ExternalProject targets?
Kent Williams
nkwmailinglists at gmail.com
Fri Jun 22 11:33:09 EDT 2012
Say I have an ExternalProject that generates several libraries
ExternalProject_Add(foo
# the usual mumbo jumbo
)
set(foo_LIBRARIES)
# foo makes 3 libraries
foreach(lib a b c)
# import the libraries
add_library(${lib} STATIC IMPORTED)
# tell CMake where the library file is
set_property(TARGET ${lib} PROPERTY
IMPORTED_LOCATION
${imported_library_filename})
# add to the library list
list(APPEND foo_LIBRARIES ${lib})
# this doesn't work apparently
add_dependencies(${lib} foo)
endforeach()
In order for parallel make to work, the foo ExternalProject must
complete successfully before any programs that link to
${foo_LIBRARIES} are compiled and linked.
I thought that making the imported library targets depend on the
ExternalProject target would behave in a transitive manner - i.e.
add_executable(foo_user foo.cxx)
target_link_libraries(foo_user ${foo_LIBRARIES})
But this is not the case. In a parallel build, the foo_user build
doesn't wait for the foo ExternalProject to finish.
If I add
add_dependencies(foo_user foo)
Everything behaves fine. But that requires explicitly add a
dependency on an ExternalProject target everywhere it's outputs are
used.
Is this a bug? A feature request? Or is there another way to make this work?
More information about the CMake
mailing list