VERIFY_INTERFACE_HEADER_SETSΒΆ

Added in version 3.24.

Used to verify that all headers in a target's PUBLIC and INTERFACE header sets can be included on their own.

When this property is set to true, and the target is an object library, static library, shared library, interface library, or executable (subject to policy CMP0209) and the target has one or more PUBLIC or INTERFACE header sets, an object library target named <target_name>_verify_interface_header_sets is created. This verification target has one source file per header in the PUBLIC and INTERFACE header sets. Each source file only includes its associated header file. The verification target links against the original target to get all of its usage requirements.

The verification target has its EXCLUDE_FROM_ALL and DISABLE_PRECOMPILE_HEADERS properties set to true, and its AUTOMOC, AUTORCC, AUTOUIC, UNITY_BUILD, and CXX_SCAN_FOR_MODULES properties set to false.

If the header's LANGUAGE property is set, the value of that property is used to determine the language with which to compile the header file. Otherwise, if the target has any C++ sources, the header is compiled as C++. Otherwise, if the target has any C sources, the header is compiled as C. Otherwise, if C++ is enabled globally, the header is compiled as C++. Otherwise, if C is enabled globally, the header is compiled as C. Otherwise, the header file is not compiled.

If the header's SKIP_LINTING property is set to true, the file is not compiled.

If VERIFY_INTERFACE_HEADER_SETS and VERIFY_PRIVATE_HEADER_SETS are both set to true, headers belonging to PUBLIC file sets will be verified twice, but with different conditions. The compiler flags used for private and interface contexts can be different, leading to the compiler interpreting the contents of the header differently.

If any interface file set verification targets are created, a top-level target called all_verify_interface_header_sets is created which depends on all interface verification targets. Another target called all_verify_header_sets is also created which depends on all_verify_interface_header_sets, and on all_verify_private_header_sets if it exists (see VERIFY_PRIVATE_HEADER_SETS).

This property is initialized by the value of the CMAKE_VERIFY_INTERFACE_HEADER_SETS variable if it is set when a target is created.

If the project wishes to control which header sets are verified by this property, it can set INTERFACE_HEADER_SETS_TO_VERIFY.