Thanks, that did the trick (though I had to use LINK_PRIVATE instead of PRIVATE; maybe I'm using an older version of cmake).
And yes, I need -fPIC code through and through. I've already taken care of that. And double yes, a few other targets needed to explicitly list foo's transitive dependencies in their own target_link_libraries(). Wasn't too hard to fix though. On Thu, Jul 24, 2014 at 12:15 AM, Nils Gladitz <nilsglad...@gmail.com> wrote: > On 07/24/2014 01:57 AM, Adar Dembo wrote: > >> I have a project that generates a shared library foo. As part of the >> build, the bar1, bar2, and bar3 static archives are created, and >> eventually, foo is linked against all of them. Thus, the project's sole >> deliverable is libfoo.so; all the necessary symbols from the bar1..bar3 >> archives are found within libfoo.so. >> >> If I try to export foo using "install(TARGETS foo EXPORT foo ...) and >> "install(EXPORT foo ...)", cmake complains that target foo requires >> targets bar1, bar2, and bar3, which are not in the export set. I have to >> add "install(TARGETS bar1 EXPORT foo ...)" for bar1..bar3 if I want this >> to succeed. However, this also means that I'm exporting my static >> archives, which as I wrote earlier aren't necessary. >> >> How can I exercise finer-grained control over foo's export set? How can >> I build an export set containing foo but excluding bar1, bar2, and bar3? >> > > You can link your static libraries to your shared library privately hence > removing them from foo's interface: > > target_link_libraries(foo PRIVATE bar1 bar2 bar3) > > You are probably already aware but just in case ... > > To portably link archives to shared libraries you need position > independent code[1]. > > Of the objects contained in your archives only those will get included > which are required to resolve some reference when creating libfoo.so. > Symbols that were contained in objects which were not required in the link > will hence not be available. > > This might seemed to have worked within the project until now given that > the archives were in your link interface. > > Nils > > [1] http://cmake.org/cmake/help/v3.0/prop_tgt/POSITION_ > INDEPENDENT_CODE.html >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake