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