You can use g++ -M
to list all files included by a header file recursively:
gcc -M myheader.hpp
Often you want to ignore system header files from /usr/include
etc – in that case, use -MM
:
gcc -MM myheader.hpp
For example:
gcc -M /usr/include/boost/circular_buffer/base.hpp
will print:
base.o: /usr/include/boost/circular_buffer/base.hpp \ /usr/include/stdc-predef.h /usr/include/boost/config.hpp \ /usr/include/boost/config/user.hpp \ /usr/include/boost/config/detail/select_compiler_config.hpp \ /usr/include/boost/config/compiler/gcc.hpp /usr/include/c++/11/cstddef \ /usr/include/x86_64-linux-gnu/c++/11/bits/c++config.h \ /usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h \ /usr/include/features.h /usr/include/features-time64.h \ /usr/include/x86_64-linux-gnu/bits/wordsize.h \ /usr/include/x86_64-linux-gnu/bits/timesize.h \ /usr/include/x86_64-linux-gnu/sys/cdefs.h \ /usr/include/x86_64-linux-gnu/bits/long-double.h \ /usr/include/x86_64-linux-gnu/gnu/stubs.h \ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ /usr/include/x86_64-linux-gnu/c++/11/bits/cpu_defines.h \ /usr/include/c++/11/pstl/pstl_config.h \ /usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h \ /usr/include/boost/config/detail/select_stdlib_config.hpp \ /usr/include/c++/11/version \ /usr/include/boost/config/stdlib/libstdcpp3.hpp /usr/include/unistd.h \ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ /usr/include/x86_64-linux-gnu/bits/environments.h \ /usr/include/x86_64-linux-gnu/bits/types.h \ /usr/include/x86_64-linux-gnu/bits/typesizes.h \ /usr/include/x86_64-linux-gnu/bits/time64.h \ /usr/include/x86_64-linux-gnu/bits/confname.h \ /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ /usr/include/linux/close_range.h \ /usr/include/boost/config/detail/select_platform_config.hpp \ /usr/include/boost/config/platform/linux.hpp /usr/include/c++/11/cstdlib \ /usr/include/stdlib.h \ /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ /usr/include/x86_64-linux-gnu/bits/waitflags.h \ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ /usr/include/x86_64-linux-gnu/bits/floatn.h \ /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ /usr/include/x86_64-linux-gnu/sys/types.h \ /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ /usr/include/x86_64-linux-gnu/bits/endian.h \ /usr/include/x86_64-linux-gnu/bits/endianness.h \ /usr/include/x86_64-linux-gnu/bits/byteswap.h \ /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ /usr/include/x86_64-linux-gnu/sys/select.h \ /usr/include/x86_64-linux-gnu/bits/select.h \ /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ /usr/include/c++/11/bits/std_abs.h \ /usr/include/boost/config/detail/posix_features.hpp \ /usr/include/boost/config/detail/suffix.hpp \ /usr/include/boost/config/helper_macros.hpp \ /usr/include/boost/config/detail/cxx_composite.hpp \ /usr/include/boost/concept_check.hpp \ /usr/include/boost/concept/assert.hpp \ /usr/include/boost/config/workaround.hpp \ /usr/include/boost/concept/detail/general.hpp \ /usr/include/boost/preprocessor/cat.hpp \ /usr/include/boost/preprocessor/config/config.hpp \ /usr/include/boost/concept/detail/backward_compatibility.hpp \ /usr/include/boost/concept/detail/has_constraints.hpp \ /usr/include/boost/type_traits/integral_constant.hpp \ /usr/include/boost/detail/workaround.hpp \ /usr/include/boost/type_traits/conditional.hpp \ /usr/include/c++/11/iterator \ /usr/include/c++/11/bits/stl_iterator_base_types.h \ /usr/include/c++/11/type_traits \ /usr/include/c++/11/bits/stl_iterator_base_funcs.h \ /usr/include/c++/11/bits/concept_check.h \ /usr/include/c++/11/debug/assertions.h \ /usr/include/c++/11/bits/stl_iterator.h \ /usr/include/c++/11/bits/cpp_type_traits.h \ /usr/include/c++/11/ext/type_traits.h /usr/include/c++/11/bits/move.h \ /usr/include/c++/11/bits/ptr_traits.h /usr/include/c++/11/iosfwd \ /usr/include/c++/11/bits/stringfwd.h \ /usr/include/c++/11/bits/memoryfwd.h /usr/include/c++/11/bits/postypes.h \ /usr/include/c++/11/cwchar /usr/include/wchar.h \ /usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h \ /usr/include/x86_64-linux-gnu/bits/wchar.h \ /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ /usr/include/c++/11/bits/stream_iterator.h \ /usr/include/c++/11/debug/debug.h \ /usr/include/c++/11/bits/streambuf_iterator.h \ /usr/include/c++/11/streambuf /usr/include/c++/11/bits/localefwd.h \ /usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h \ /usr/include/c++/11/clocale /usr/include/locale.h \ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/11/cctype \ /usr/include/ctype.h /usr/include/c++/11/bits/ios_base.h \ /usr/include/c++/11/ext/atomicity.h \ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h \ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h \ /usr/include/pthread.h /usr/include/sched.h \ /usr/include/x86_64-linux-gnu/bits/sched.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ /usr/include/x86_64-linux-gnu/bits/time.h \ /usr/include/x86_64-linux-gnu/bits/timex.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ /usr/include/x86_64-linux-gnu/bits/setjmp.h \ /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ /usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h \ /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ /usr/include/c++/11/bits/locale_classes.h /usr/include/c++/11/string \ /usr/include/c++/11/bits/char_traits.h \ /usr/include/c++/11/bits/stl_algobase.h \ /usr/include/c++/11/bits/functexcept.h \ /usr/include/c++/11/bits/exception_defines.h \ /usr/include/c++/11/ext/numeric_traits.h \ /usr/include/c++/11/bits/stl_pair.h \ /usr/include/c++/11/bits/predefined_ops.h /usr/include/c++/11/cstdint \ /usr/lib/gcc/x86_64-linux-gnu/11/include/stdint.h /usr/include/stdint.h \ /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ /usr/include/c++/11/bits/allocator.h \ /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h \ /usr/include/c++/11/ext/new_allocator.h /usr/include/c++/11/new \ /usr/include/c++/11/bits/exception.h \ /usr/include/c++/11/bits/ostream_insert.h \ /usr/include/c++/11/bits/cxxabi_forced.h \ /usr/include/c++/11/bits/stl_function.h \ /usr/include/c++/11/backward/binders.h \ /usr/include/c++/11/bits/range_access.h \ /usr/include/c++/11/initializer_list \ /usr/include/c++/11/bits/basic_string.h \ /usr/include/c++/11/ext/alloc_traits.h \ /usr/include/c++/11/bits/alloc_traits.h \ /usr/include/c++/11/bits/stl_construct.h /usr/include/c++/11/string_view \ /usr/include/c++/11/bits/functional_hash.h \ /usr/include/c++/11/bits/hash_bytes.h \ /usr/include/c++/11/bits/string_view.tcc \ /usr/include/c++/11/ext/string_conversions.h /usr/include/c++/11/cstdio \ /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ /usr/include/c++/11/cerrno /usr/include/errno.h \ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ /usr/include/x86_64-linux-gnu/asm/errno.h \ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ /usr/include/c++/11/bits/charconv.h \ /usr/include/c++/11/bits/basic_string.tcc \ /usr/include/c++/11/bits/locale_classes.tcc \ /usr/include/c++/11/system_error \ /usr/include/x86_64-linux-gnu/c++/11/bits/error_constants.h \ /usr/include/c++/11/stdexcept /usr/include/c++/11/exception \ /usr/include/c++/11/bits/exception_ptr.h \ /usr/include/c++/11/bits/cxxabi_init_exception.h \ /usr/include/c++/11/typeinfo /usr/include/c++/11/bits/nested_exception.h \ /usr/include/c++/11/bits/streambuf.tcc \ /usr/include/boost/type_traits/conversion_traits.hpp \ /usr/include/boost/type_traits/is_convertible.hpp \ /usr/include/boost/type_traits/intrinsics.hpp \ /usr/include/boost/type_traits/detail/config.hpp \ /usr/include/boost/version.hpp \ /usr/include/boost/type_traits/is_complete.hpp \ /usr/include/boost/type_traits/declval.hpp \ /usr/include/boost/type_traits/add_rvalue_reference.hpp \ /usr/include/boost/type_traits/is_void.hpp \ /usr/include/boost/type_traits/is_reference.hpp \ /usr/include/boost/type_traits/is_lvalue_reference.hpp \ /usr/include/boost/type_traits/is_rvalue_reference.hpp \ /usr/include/boost/type_traits/remove_reference.hpp \ /usr/include/boost/type_traits/is_function.hpp \ /usr/include/boost/type_traits/detail/is_function_cxx_11.hpp \ /usr/include/boost/type_traits/detail/yes_no_type.hpp \ /usr/include/boost/type_traits/is_array.hpp \ /usr/include/boost/static_assert.hpp \ /usr/include/boost/type_traits/is_arithmetic.hpp \ /usr/include/boost/type_traits/is_integral.hpp \ /usr/include/boost/type_traits/is_floating_point.hpp \ /usr/include/boost/type_traits/is_abstract.hpp \ /usr/include/boost/type_traits/add_lvalue_reference.hpp \ /usr/include/boost/type_traits/add_reference.hpp \ /usr/include/c++/11/utility /usr/include/c++/11/bits/stl_relops.h \ /usr/include/boost/type_traits/is_same.hpp \ /usr/include/boost/concept/usage.hpp \ /usr/include/boost/concept/detail/concept_def.hpp \ /usr/include/boost/preprocessor/seq/for_each_i.hpp \ /usr/include/boost/preprocessor/arithmetic/dec.hpp \ /usr/include/boost/preprocessor/config/limits.hpp \ /usr/include/boost/preprocessor/arithmetic/limits/dec_256.hpp \ /usr/include/boost/preprocessor/arithmetic/inc.hpp \ /usr/include/boost/preprocessor/arithmetic/limits/inc_256.hpp \ /usr/include/boost/preprocessor/control/if.hpp \ /usr/include/boost/preprocessor/control/iif.hpp \ /usr/include/boost/preprocessor/logical/bool.hpp \ /usr/include/boost/preprocessor/logical/limits/bool_256.hpp \ /usr/include/boost/preprocessor/repetition/for.hpp \ /usr/include/boost/preprocessor/debug/error.hpp \ /usr/include/boost/preprocessor/facilities/empty.hpp \ /usr/include/boost/preprocessor/detail/auto_rec.hpp \ /usr/include/boost/preprocessor/detail/limits/auto_rec_256.hpp \ /usr/include/boost/preprocessor/repetition/detail/for.hpp \ /usr/include/boost/preprocessor/control/expr_iif.hpp \ /usr/include/boost/preprocessor/tuple/eat.hpp \ /usr/include/boost/preprocessor/repetition/detail/limits/for_256.hpp \ /usr/include/boost/preprocessor/repetition/limits/for_256.hpp \ /usr/include/boost/preprocessor/seq/seq.hpp \ /usr/include/boost/preprocessor/seq/elem.hpp \ /usr/include/boost/preprocessor/seq/limits/elem_256.hpp \ /usr/include/boost/preprocessor/seq/size.hpp \ /usr/include/boost/preprocessor/seq/limits/size_256.hpp \ /usr/include/boost/preprocessor/seq/detail/is_empty.hpp \ /usr/include/boost/preprocessor/logical/compl.hpp \ /usr/include/boost/preprocessor/tuple/elem.hpp \ /usr/include/boost/preprocessor/facilities/expand.hpp \ /usr/include/boost/preprocessor/facilities/overload.hpp \ /usr/include/boost/preprocessor/variadic/size.hpp \ /usr/include/boost/preprocessor/facilities/check_empty.hpp \ /usr/include/boost/preprocessor/variadic/has_opt.hpp \ /usr/include/boost/preprocessor/variadic/limits/size_64.hpp \ /usr/include/boost/preprocessor/tuple/rem.hpp \ /usr/include/boost/preprocessor/tuple/detail/is_single_return.hpp \ /usr/include/boost/preprocessor/variadic/elem.hpp \ /usr/include/boost/preprocessor/variadic/limits/elem_64.hpp \ /usr/include/boost/preprocessor/seq/enum.hpp \ /usr/include/boost/preprocessor/seq/limits/enum_256.hpp \ /usr/include/boost/preprocessor/comma_if.hpp \ /usr/include/boost/preprocessor/punctuation/comma_if.hpp \ /usr/include/boost/preprocessor/punctuation/comma.hpp \ /usr/include/boost/concept/detail/concept_undef.hpp \ /usr/include/boost/limits.hpp /usr/include/c++/11/limits \ /usr/include/boost/core/allocator_access.hpp \ /usr/include/boost/core/pointer_traits.hpp \ /usr/include/boost/core/addressof.hpp \ /usr/include/boost/core/empty_value.hpp \ /usr/include/boost/type_traits/is_stateless.hpp \ /usr/include/boost/type_traits/has_trivial_constructor.hpp \ /usr/include/boost/type_traits/is_pod.hpp \ /usr/include/boost/type_traits/is_scalar.hpp \ /usr/include/boost/type_traits/is_enum.hpp \ /usr/include/boost/type_traits/is_pointer.hpp \ /usr/include/boost/type_traits/is_member_pointer.hpp \ /usr/include/boost/type_traits/is_member_function_pointer.hpp \ /usr/include/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp \ /usr/include/boost/type_traits/is_default_constructible.hpp \ /usr/include/boost/type_traits/is_volatile.hpp \ /usr/include/boost/type_traits/has_trivial_copy.hpp \ /usr/include/boost/type_traits/is_copy_constructible.hpp \ /usr/include/boost/type_traits/is_constructible.hpp \ /usr/include/boost/type_traits/is_destructible.hpp \ /usr/include/boost/type_traits/has_trivial_destructor.hpp \ /usr/include/boost/type_traits/is_class.hpp \ /usr/include/boost/type_traits/is_empty.hpp \ /usr/include/boost/type_traits/remove_cv.hpp \ /usr/include/boost/type_traits/is_nothrow_move_constructible.hpp \ /usr/include/boost/type_traits/enable_if.hpp \ /usr/include/boost/type_traits/is_nothrow_move_assignable.hpp \ /usr/include/boost/type_traits/has_trivial_move_assign.hpp \ /usr/include/boost/type_traits/is_assignable.hpp \ /usr/include/boost/type_traits/has_nothrow_assign.hpp \ /usr/include/boost/type_traits/is_const.hpp \ /usr/include/boost/move/adl_move_swap.hpp \ /usr/include/boost/move/detail/workaround.hpp \ /usr/include/boost/move/utility_core.hpp \ /usr/include/boost/move/detail/config_begin.hpp \ /usr/include/boost/move/core.hpp \ /usr/include/boost/move/detail/config_end.hpp \ /usr/include/boost/move/detail/meta_utils.hpp \ /usr/include/boost/move/detail/meta_utils_core.hpp \ /usr/include/boost/move/detail/addressof.hpp \ /usr/include/boost/move/move.hpp /usr/include/boost/move/utility.hpp \ /usr/include/boost/move/traits.hpp \ /usr/include/boost/move/detail/type_traits.hpp \ /usr/include/c++/11/cassert /usr/include/assert.h \ /usr/include/boost/move/iterator.hpp \ /usr/include/boost/move/detail/iterator_traits.hpp \ /usr/include/boost/move/detail/std_ns_begin.hpp \ /usr/include/boost/move/detail/std_ns_end.hpp \ /usr/include/boost/move/algorithm.hpp \ /usr/include/boost/move/algo/move.hpp \ /usr/include/boost/move/detail/iterator_to_raw_pointer.hpp \ /usr/include/boost/move/detail/to_raw_pointer.hpp \ /usr/include/boost/move/detail/pointer_element.hpp \ /usr/include/c++/11/algorithm /usr/include/c++/11/bits/stl_algo.h \ /usr/include/c++/11/bits/algorithmfwd.h \ /usr/include/c++/11/bits/stl_heap.h \ /usr/include/c++/11/bits/stl_tempbuf.h \ /usr/include/c++/11/bits/uniform_int_dist.h \ /usr/include/c++/11/pstl/glue_algorithm_defs.h \ /usr/include/c++/11/functional /usr/include/c++/11/tuple \ /usr/include/c++/11/array /usr/include/c++/11/bits/uses_allocator.h \ /usr/include/c++/11/bits/invoke.h /usr/include/c++/11/bits/refwrap.h \ /usr/include/c++/11/bits/std_function.h \ /usr/include/c++/11/unordered_map \ /usr/include/c++/11/ext/aligned_buffer.h \ /usr/include/c++/11/bits/hashtable.h \ /usr/include/c++/11/bits/hashtable_policy.h \ /usr/include/c++/11/bits/enable_special_members.h \ /usr/include/c++/11/bits/node_handle.h \ /usr/include/c++/11/bits/unordered_map.h \ /usr/include/c++/11/bits/erase_if.h /usr/include/c++/11/vector \ /usr/include/c++/11/bits/stl_uninitialized.h \ /usr/include/c++/11/bits/stl_vector.h \ /usr/include/c++/11/bits/stl_bvector.h \ /usr/include/c++/11/bits/vector.tcc \ /usr/include/c++/11/pstl/execution_defs.h /usr/include/c++/11/memory \ /usr/include/c++/11/bits/stl_raw_storage_iter.h \ /usr/include/c++/11/bits/align.h /usr/include/c++/11/bit \ /usr/include/c++/11/bits/unique_ptr.h \ /usr/include/c++/11/bits/shared_ptr.h \ /usr/include/c++/11/bits/shared_ptr_base.h \ /usr/include/c++/11/bits/allocated_ptr.h \ /usr/include/c++/11/ext/concurrence.h \ /usr/include/c++/11/bits/shared_ptr_atomic.h \ /usr/include/c++/11/bits/atomic_base.h \ /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /usr/include/c++/11/backward/auto_ptr.h \ /usr/include/c++/11/pstl/glue_memory_defs.h /usr/include/c++/11/deque \ /usr/include/c++/11/bits/stl_deque.h /usr/include/c++/11/bits/deque.tcc