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?
--
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