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.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.15/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.html