# Difference between PUBLIC and INTERFACE is not stated

**URL:** https://discourse.cmake.org/t/difference-between-public-and-interface-is-not-stated/7926
**Category:** Site Feedback
**Created:** [April 18, 2023, 2:09pm UTC](https://discourse.cmake.org/t/difference-between-public-and-interface-is-not-stated/7926 "2023-04-18T14:09:05Z")
**Posts on this page:** 1
**Showing post:** 6

<div class="post-metadata">

### Author: ![adaldev](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/a/9dc877/32.png) [@adaldev](https://discourse.cmake.org/u/adaldev)
#### Post date: [April 21, 2023, 1:15pm UTC](https://discourse.cmake.org/t/difference-between-public-and-interface-is-not-stated/7926/6 "2023-04-21T13:15:42Z")

</div>

Is it what you needed?

> [@the usage of target\_include\_directories vs target\_link\_libraries](https://discourse.cmake.org/t/the-usage-of-target-include-directories-vs-target-link-libraries/7914/6):
>
> I sum up it in the following way (`for target_compile_definitions` and `target_link_libraries`):  
> `PRIVATE`: the target uses the definition/dependency only to be build, not its clients  
> `PUBLIC`: the target uses the definition/dependency when it is built, its clients also use it  
> `INTERFACE`: the target does not uses the definition/dependency when it is built, but its clients use it

it’s also the same for `target_compile_features` by the way (just replace _definition_ or _dependency_ by _feature_)

---

_[View the full topic](https://discourse.cmake.org/t/difference-between-public-and-interface-is-not-stated/7926)._
