VERIFY_PRIVATE_HEADER_SETSΒΆ
Added in version 4.3.
Used to verify that all headers in a target's PUBLIC and PRIVATE
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, module library, interface library, or executable, and
the target has one or more PUBLIC or PRIVATE header sets, an object
library target named <target_name>_verify_private_header_sets is created.
This verification target has one source file per header in the PUBLIC and
PRIVATE header sets. Each source file only includes its associated header
file.
Properties affecting compilation are copied from the original target to the verification target so that the headers will be interpreted the same way by the compiler as when compiling the original target's sources. There are some caveats with this approach. It cannot replicate the same conditions if any of those properties or properties inherited through build requirements from transitive dependencies contain target-dependent generator expressions that do not specify the target for the expansion. Such expressions can expand to different contents depending on the target they are being used on.
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_PRIVATE_HEADER_SETS and VERIFY_INTERFACE_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 private file set verification targets are created, a top-level target
called all_verify_private_header_sets is created which depends on all private verification
targets. Another target called all_verify_header_sets is also created
which depends on all_verify_private_header_sets, and on all_verify_interface_header_sets if it
exists (see VERIFY_INTERFACE_HEADER_SETS).
This property is initialized by the value of the CMAKE_VERIFY_PRIVATE_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 PRIVATE_HEADER_SETS_TO_VERIFY.