[CMake] Difference between PRIVATE and PUBLIC with target_link_libraries

iosif neitzke iosif.neitzke+cmake at gmail.com
Wed May 11 08:13:04 EDT 2016


> When A links in B as PRIVATE, it is saying that A uses B in its
> implementation, but B is not used in any part of A's public API.

> When A links in B as INTERFACE, it is saying that A does not use B in its
> implementation, but B is used in A's public API.

> When A links in B as PUBLIC, it is essentially a combination of PRIVATE and
> INTERFACE. It says that A uses B in its implementation and B is also used in
> A's public API.

All totally correct, and that is how visibility for target_link and
target_include commands idiomatically should be used, but I don't
believe anything in CMake ensures the code architecture adheres to
this scheme.


More information about the CMake mailing list