INTERFACE_INCLUDE_DIRECTORIES¶
List of public include directories requirements for a library.
Targets may populate this property to publish the include directories
required to compile against the headers for the target.  The target_include_directories()
command populates this property with values given to the PUBLIC and
INTERFACE keywords.  Projects may also get and set the property directly.
When target dependencies are specified using target_link_libraries(),
CMake will read this property from all target dependencies to determine the
build properties of the consumer.
Contents of INTERFACE_INCLUDE_DIRECTORIES may use "generator expressions"
with the syntax $<...>.  See the cmake-generator-expressions(7)
manual for available expressions.  See the cmake-buildsystem(7)
-manual for more on defining buildsystem properties.
Include directories usage requirements commonly differ between the build-tree
and the install-tree.  The BUILD_INTERFACE and INSTALL_INTERFACE
generator expressions can be used to describe separate usage requirements
based on the usage location.  Relative paths are allowed within the
INSTALL_INTERFACE expression and are interpreted relative to the
installation prefix.  For example:
target_include_directories(mylib INTERFACE
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
  $<INSTALL_INTERFACE:include/mylib>  # <prefix>/include/mylib
)
Creating Relocatable Packages¶
Note that it is not advisable to populate the INSTALL_INTERFACE of
the INTERFACE_INCLUDE_DIRECTORIES of a target with absolute paths to the include
directories of dependencies.  That would hard-code into installed packages
the include directory paths for dependencies
as found on the machine the package was made on.
The INSTALL_INTERFACE of the INTERFACE_INCLUDE_DIRECTORIES is only
suitable for specifying the required include directories for headers
provided with the target itself, not those provided by the transitive
dependencies listed in its INTERFACE_LINK_LIBRARIES target
property.  Those dependencies should themselves be targets that specify
their own header locations in INTERFACE_INCLUDE_DIRECTORIES.
See the Creating Relocatable Packages section of the
cmake-packages(7) manual for discussion of additional care
that must be taken when specifying usage requirements while creating
packages for redistribution.
