[CMake] Private dependencies of static libraries exported as targets

Nicholas Braden nicholas11braden at gmail.com
Tue Aug 16 21:14:09 EDT 2016


Ah, I misunderstood what you were asking about. It would be pretty
weird if CMake didn't know that static libraries always need all their
dependencies linked regardless of privacy, but I agree it should at
least be mentioned somewhere. My bad.

As for include path bloat, I cannot replicate this in my test project
- CMake will link all the dependencies as required but will NOT
violate "PRIVATE" for other things like include directories. Could you
give an example where you are seeing a static library's private
dependency's include path being added when linking the static library?

On Tue, Aug 16, 2016 at 7:44 PM, Ivan Shapovalov <intelfx at intelfx.name> wrote:
> TBH, I do not see the "PRIVATE dependencies are made PUBLIC for the
> purposes of linking when the dependent is static library" there.
>
> --
> Ivan Shapovalov / intelfx /
>
>
> On 2016-08-16 at 02:35 -0500, Nicholas Braden wrote:
>> Yes, the behavior is documented in several places, the most prominent
>> being here:
>> https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#t
>> ransitive-usage-requirements
>>
>>
>> On Mon, Aug 15, 2016 at 9:22 PM, Ivan Shapovalov <intelfx at intelfx.nam
>> e> wrote:
>> >
>> > On 2016-08-15 at 21:46 -0400, Guillaume Dumont wrote:
>> > >
>> > > As far as I know the PRIVATE
>> > > keyword
>> > > should have no effect on transitive linking when foo is static
>> > > and we
>> > > call:
>> > >
>> > > target_link_libraries(foo PRIVATE bar)
>> > >
>> > > Hope this helps.
>> >
>> > Wow. I did not know that. Should've tested on sample project.
>> > It does not solve include path bloat though, but that's a minor
>> > issue.
>> >
>> > One question remains... is this behavior documented somewhere?
>> >
>> > Anyway, huge thanks,
>> > --
>> Ivan Shapovalov / intelfx /


More information about the CMake mailing list