VERIFY_INTERFACE_HEADER_SETS: Add IWYU pragma: associated to verification file
I have encountered the following issue when using cmake with IWYU and came up with this solution
The problem
include-what-you-use
does not give advice to headers when using -DCMAKE_VERIFY_INTERFACE_HEADER_SETS=ON
The solution
Adding // IWYU pragma: associated
to every {PROJECT}_verify_header_sets/{header}.h.cxx
file
What it does
According to the docs
Headers marked with // IWYU pragma: associated
are treated as part of the overall language unit of the file
Testing
I wrote the following
foo.h
#include <iostream>
int ab(int a, int b);
foo.cpp
#include <foo.h>
int ab(int a, int b) {
return a + b;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.24.0)
project(BLAH)
add_library(foo foo.cpp)
target_include_directories(foo PUBLIC .)
target_sources(blah PUBLIC FILE_SET internal_h_files TYPE HEADERS BASE_DIRS . FILES blah.h)
I then ran {CMAKE_BIN} -DCMAKE_VERIFY_INTERFACE_HEADER_SETS=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .
then iwyu_tool.py -p compile_commands.json
(iwyu_tool.py is from include-what-you-use)
relevant output before the change
foo/foo_verify_interface_header_sets/foo.h.cxx should add these lines:
foo/foo_verify_interface_header_sets/foo.h.cxx should remove these lines:
- #include <foo.h> // lines 1-1
The full include-list for foo/foo_verify_interface_header_sets/foo.h.cxx:
---
relevant output after the change
foo/foo.h should add these lines:
foo/foo.h should remove these lines:
- #include <iostream> // lines 1-1
The full include-list for foo/foo.h:
---
Topic-rename: verify-header-sets-iwyu