Linux cmake include directory

include_directories¶

Add the given directories to those the compiler uses to search for include files. Relative paths are interpreted as relative to the current source directory.

The include directories are added to the INCLUDE_DIRECTORIES directory property for the current CMakeLists file. They are also added to the INCLUDE_DIRECTORIES target property for each target in the current CMakeLists file. The target property values are the ones used by the generators.

By default the directories specified are appended onto the current list of directories. This default behavior can be changed by setting CMAKE_INCLUDE_DIRECTORIES_BEFORE to ON . By using AFTER or BEFORE explicitly, you can select between appending and prepending, independent of the default.

If the SYSTEM option is given, the compiler will be told the directories are meant as system include directories on some platforms. Signaling this setting might achieve effects such as the compiler skipping warnings, or these fixed-install system files not being considered in dependency calculations — see compiler docs.

Arguments to 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.

Prefer the target_include_directories() command to add include directories to individual targets and optionally propagate/export them to dependents.

See Also¶

Источник

target_include_directories¶

Specifies include directories to use when compiling a given target. The named must have been created by a command such as add_executable() or add_library() and must not be an ALIAS target .

By using AFTER or BEFORE explicitly, you can select between appending and prepending, independent of the default.

Читайте также:  Linux unmount usb flash

The INTERFACE , PUBLIC and PRIVATE keywords are required to specify the scope of the following arguments. PRIVATE and PUBLIC items will populate the INCLUDE_DIRECTORIES property of . PUBLIC and INTERFACE items will populate the INTERFACE_INCLUDE_DIRECTORIES property of . The following arguments specify include directories.

New in version 3.11: Allow setting INTERFACE items on IMPORTED targets .

Repeated calls for the same append items in the order called.

If SYSTEM is specified, the compiler will be told the directories are meant as system include directories on some platforms. This may have effects such as suppressing warnings or skipping the contained headers in dependency calculations (see compiler documentation). Additionally, system include directories are searched after normal include directories regardless of the order specified.

If SYSTEM is used together with PUBLIC or INTERFACE , the INTERFACE_SYSTEM_INCLUDE_DIRECTORIES target property will be populated with the specified directories.

Arguments to target_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.

Specified include directories may be absolute paths or relative paths. A relative path will be interpreted as relative to the current source directory (i.e. CMAKE_CURRENT_SOURCE_DIR ) and converted to an absolute path before storing it in the associated target property. If the path starts with a generator expression, it will always be assumed to be an absolute path (with one exception noted below) and will be used unmodified.

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 as relative to the installation prefix. Relative paths should not be used in BUILD_INTERFACE expressions because they will not be converted to absolute. For example:

target_include_directories(mylib PUBLIC $BUILD_INTERFACE:$CMAKE_CURRENT_SOURCE_DIR>/include/mylib> $INSTALL_INTERFACE:include/mylib> # /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.

See Also¶

Источник

INCLUDE_DIRECTORIES¶

List of preprocessor include file search directories.

This property specifies the list of directories given so far to the include_directories() command.

This property is used to populate the INCLUDE_DIRECTORIES target property, which is used by the generators to set the include directories for the compiler.

In addition to accepting values from that command, values may be set directly on any directory using the set_property() command, and can be set on the current directory using the set_directory_properties() command. A directory gets its initial value from its parent directory if it has one. The initial value of the INCLUDE_DIRECTORIES target property comes from the value of this property. Both directory and target property values are adjusted by calls to the include_directories() command. Calls to set_property() or set_directory_properties() , however, will update the directory property value without updating target property values. Therefore direct property updates must be made before calls to add_executable() or add_library() for targets they are meant to affect.

The target property values are used by the generators to set the include paths for the compiler.

Contents of 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.

Источник

Оцените статью
Adblock
detector