diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst
index 687c5022b3..bb3f3efcbc 100644
--- a/doc/guides/contributing/coding_style.rst
+++ b/doc/guides/contributing/coding_style.rst
@@ -987,5 +987,8 @@ reason
 sources [mandatory]
 	As above
 
+headers
+	As above
+
 version
 	As above
diff --git a/drivers/baseband/acc100/meson.build b/drivers/baseband/acc100/meson.build
index 7ac44dce71..9a1a3b8b07 100644
--- a/drivers/baseband/acc100/meson.build
+++ b/drivers/baseband/acc100/meson.build
@@ -5,4 +5,4 @@ deps += ['bbdev', 'bus_vdev', 'ring', 'pci', 'bus_pci']
 
 sources = files('rte_acc100_pmd.c')
 
-install_headers('rte_acc100_cfg.h')
+headers = files('rte_acc100_cfg.h')
diff --git a/drivers/baseband/fpga_5gnr_fec/meson.build b/drivers/baseband/fpga_5gnr_fec/meson.build
index 9d10bcf80e..745cd271f2 100644
--- a/drivers/baseband/fpga_5gnr_fec/meson.build
+++ b/drivers/baseband/fpga_5gnr_fec/meson.build
@@ -5,4 +5,4 @@ deps += ['bbdev', 'bus_vdev', 'ring', 'pci', 'bus_pci']
 
 sources = files('rte_fpga_5gnr_fec.c')
 
-install_headers('rte_pmd_fpga_5gnr_fec.h')
+headers = files('rte_pmd_fpga_5gnr_fec.h')
diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
index 3ff44d902a..4d0507f553 100644
--- a/drivers/bus/ifpga/meson.build
+++ b/drivers/bus/ifpga/meson.build
@@ -8,5 +8,5 @@ if is_windows
 endif
 
 deps += ['pci', 'kvargs', 'rawdev']
-install_headers('rte_bus_ifpga.h')
+headers = files('rte_bus_ifpga.h')
 sources = files('ifpga_common.c', 'ifpga_bus.c')
diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build
index 9778004952..78ec830b25 100644
--- a/drivers/bus/pci/meson.build
+++ b/drivers/bus/pci/meson.build
@@ -2,7 +2,7 @@
 # Copyright(c) 2017 Intel Corporation
 
 deps += ['pci']
-install_headers('rte_bus_pci.h')
+headers = files('rte_bus_pci.h')
 sources = files('pci_common.c',
 	'pci_params.c')
 if is_linux
diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build
index 967d54e4f8..44b2966baa 100644
--- a/drivers/bus/vdev/meson.build
+++ b/drivers/bus/vdev/meson.build
@@ -3,6 +3,6 @@
 
 sources = files('vdev.c',
 	'vdev_params.c')
-install_headers('rte_bus_vdev.h')
+headers = files('rte_bus_vdev.h')
 
 deps += ['kvargs']
diff --git a/drivers/bus/vmbus/meson.build b/drivers/bus/vmbus/meson.build
index 7e7b1dad53..b90e74d69c 100644
--- a/drivers/bus/vmbus/meson.build
+++ b/drivers/bus/vmbus/meson.build
@@ -7,7 +7,7 @@ if is_windows
 endif
 
 
-install_headers('rte_bus_vmbus.h','rte_vmbus_reg.h')
+headers = files('rte_bus_vmbus.h','rte_vmbus_reg.h')
 
 sources = files('vmbus_common.c',
 		'vmbus_channel.c',
diff --git a/drivers/crypto/scheduler/meson.build b/drivers/crypto/scheduler/meson.build
index df8f3fe7b7..2209c50232 100644
--- a/drivers/crypto/scheduler/meson.build
+++ b/drivers/crypto/scheduler/meson.build
@@ -13,7 +13,7 @@ sources = files(
 	'scheduler_roundrobin.c',
 )
 
-install_headers(
+headers = files(
 	'rte_cryptodev_scheduler.h',
 	'rte_cryptodev_scheduler_operations.h',
 )
diff --git a/drivers/mempool/dpaa2/meson.build b/drivers/mempool/dpaa2/meson.build
index c3f479afa1..ed55c0d437 100644
--- a/drivers/mempool/dpaa2/meson.build
+++ b/drivers/mempool/dpaa2/meson.build
@@ -9,4 +9,4 @@ endif
 deps += ['bus_fslmc']
 sources = files('dpaa2_hw_mempool.c')
 
-install_headers('rte_dpaa2_mempool.h')
+headers = files('rte_dpaa2_mempool.h')
diff --git a/drivers/meson.build b/drivers/meson.build
index a5a6fed06e..4bb7e92183 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -60,6 +60,7 @@ foreach subpath:subdirs
 		name = drv
 		fmt_name = ''
 		sources = []
+		headers = []
 		objs = []
 		cflags = default_cflags
 		includes = [include_directories(drv_path)]
@@ -136,6 +137,8 @@ foreach subpath:subdirs
 
 			dpdk_extra_ldflags += pkgconfig_extra_libs
 
+			install_headers(headers)
+
 			# generate pmdinfo sources by building a temporary
 			# lib and then running pmdinfogen on the contents of
 			# that lib. The final lib reuses the object files and
diff --git a/drivers/net/avp/meson.build b/drivers/net/avp/meson.build
index a5f63cdef9..7c6b964acb 100644
--- a/drivers/net/avp/meson.build
+++ b/drivers/net/avp/meson.build
@@ -6,4 +6,4 @@ if not is_linux
 	reason = 'only supported on linux'
 endif
 sources = files('avp_ethdev.c')
-install_headers('rte_avp_common.h', 'rte_avp_fifo.h')
+headers = files('rte_avp_common.h', 'rte_avp_fifo.h')
diff --git a/drivers/net/bnxt/meson.build b/drivers/net/bnxt/meson.build
index 39521080f8..9c153c402b 100644
--- a/drivers/net/bnxt/meson.build
+++ b/drivers/net/bnxt/meson.build
@@ -2,7 +2,7 @@
 # Copyright(c) 2018 Intel Corporation
 # Copyright(c) 2020 Broadcom
 
-install_headers('rte_pmd_bnxt.h')
+headers = files('rte_pmd_bnxt.h')
 
 includes += include_directories('tf_ulp')
 includes += include_directories('tf_core')
diff --git a/drivers/net/bonding/meson.build b/drivers/net/bonding/meson.build
index a3eff3b31c..adf64626ec 100644
--- a/drivers/net/bonding/meson.build
+++ b/drivers/net/bonding/meson.build
@@ -8,4 +8,4 @@ sources = files('rte_eth_bond_api.c', 'rte_eth_bond_pmd.c', 'rte_eth_bond_flow.c
 deps += 'sched' # needed for rte_bitmap.h
 deps += ['ip_frag']
 
-install_headers('rte_eth_bond.h', 'rte_eth_bond_8023ad.h')
+headers = files('rte_eth_bond.h', 'rte_eth_bond_8023ad.h')
diff --git a/drivers/net/dpaa/meson.build b/drivers/net/dpaa/meson.build
index c00dba6f62..ecb06ea65e 100644
--- a/drivers/net/dpaa/meson.build
+++ b/drivers/net/dpaa/meson.build
@@ -18,4 +18,4 @@ if cc.has_argument('-Wno-pointer-arith')
 	cflags += '-Wno-pointer-arith'
 endif
 
-install_headers('rte_pmd_dpaa.h')
+headers = files('rte_pmd_dpaa.h')
diff --git a/drivers/net/dpaa2/meson.build b/drivers/net/dpaa2/meson.build
index 4312aa73f7..7e43553a3b 100644
--- a/drivers/net/dpaa2/meson.build
+++ b/drivers/net/dpaa2/meson.build
@@ -21,4 +21,4 @@ sources = files('base/dpaa2_hw_dpni.c',
 
 includes += include_directories('base', 'mc')
 
-install_headers('rte_pmd_dpaa2.h')
+headers = files('rte_pmd_dpaa2.h')
diff --git a/drivers/net/i40e/meson.build b/drivers/net/i40e/meson.build
index 68f9895cd7..bb0c542a30 100644
--- a/drivers/net/i40e/meson.build
+++ b/drivers/net/i40e/meson.build
@@ -52,4 +52,4 @@ elif arch_subdir == 'arm'
        sources += files('i40e_rxtx_vec_neon.c')
 endif
 
-install_headers('rte_pmd_i40e.h')
+headers = files('rte_pmd_i40e.h')
diff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build
index 99e1b773a3..f6a64d91c6 100644
--- a/drivers/net/ice/meson.build
+++ b/drivers/net/ice/meson.build
@@ -39,4 +39,4 @@ sources += files('ice_dcf.c',
 		 'ice_dcf_ethdev.c',
 		 'ice_dcf_parent.c')
 
-install_headers('rte_pmd_ice.h')
+headers = files('rte_pmd_ice.h')
diff --git a/drivers/net/ixgbe/meson.build b/drivers/net/ixgbe/meson.build
index 949075eb22..f104378912 100644
--- a/drivers/net/ixgbe/meson.build
+++ b/drivers/net/ixgbe/meson.build
@@ -30,4 +30,4 @@ endif
 
 includes += include_directories('base')
 
-install_headers('rte_pmd_ixgbe.h')
+headers = files('rte_pmd_ixgbe.h')
diff --git a/drivers/net/ring/meson.build b/drivers/net/ring/meson.build
index e877a4b4bd..26a324eebb 100644
--- a/drivers/net/ring/meson.build
+++ b/drivers/net/ring/meson.build
@@ -2,4 +2,4 @@
 # Copyright(c) 2017 Intel Corporation
 
 sources = files('rte_eth_ring.c')
-install_headers('rte_eth_ring.h')
+headers = files('rte_eth_ring.h')
diff --git a/drivers/net/softnic/meson.build b/drivers/net/softnic/meson.build
index 96c003e157..b96ae6ba9e 100644
--- a/drivers/net/softnic/meson.build
+++ b/drivers/net/softnic/meson.build
@@ -5,7 +5,7 @@ if not is_linux
 	build = false
 	reason = 'only supported on linux'
 endif
-install_headers('rte_eth_softnic.h')
+headers = files('rte_eth_softnic.h')
 sources = files('rte_eth_softnic_tm.c',
 	'rte_eth_softnic.c',
 	'rte_eth_softnic_mempool.c',
diff --git a/drivers/net/vhost/meson.build b/drivers/net/vhost/meson.build
index 963b30f209..1ae4854b8f 100644
--- a/drivers/net/vhost/meson.build
+++ b/drivers/net/vhost/meson.build
@@ -4,5 +4,5 @@
 build = dpdk_conf.has('RTE_LIB_VHOST')
 reason = 'missing dependency, DPDK vhost library'
 sources = files('rte_eth_vhost.c')
-install_headers('rte_eth_vhost.h')
+headers = files('rte_eth_vhost.h')
 deps += 'vhost'
diff --git a/drivers/raw/dpaa2_cmdif/meson.build b/drivers/raw/dpaa2_cmdif/meson.build
index 06c0fe756d..8824f887ce 100644
--- a/drivers/raw/dpaa2_cmdif/meson.build
+++ b/drivers/raw/dpaa2_cmdif/meson.build
@@ -6,4 +6,4 @@ reason = 'missing dependency, DPDK DPAA2 mempool driver'
 deps += ['rawdev', 'mempool_dpaa2', 'bus_vdev']
 sources = files('dpaa2_cmdif.c')
 
-install_headers('rte_pmd_dpaa2_cmdif.h')
+headers = files('rte_pmd_dpaa2_cmdif.h')
diff --git a/drivers/raw/dpaa2_qdma/meson.build b/drivers/raw/dpaa2_qdma/meson.build
index 3eeab0d1c1..0c9ae0d8dc 100644
--- a/drivers/raw/dpaa2_qdma/meson.build
+++ b/drivers/raw/dpaa2_qdma/meson.build
@@ -6,4 +6,4 @@ reason = 'missing dependency, DPDK DPAA2 mempool driver'
 deps += ['rawdev', 'mempool_dpaa2', 'ring', 'kvargs']
 sources = files('dpaa2_qdma.c')
 
-install_headers('rte_pmd_dpaa2_qdma.h')
+headers = files('rte_pmd_dpaa2_qdma.h')
diff --git a/drivers/raw/ioat/meson.build b/drivers/raw/ioat/meson.build
index 5eff76a1a3..6fbae05b78 100644
--- a/drivers/raw/ioat/meson.build
+++ b/drivers/raw/ioat/meson.build
@@ -14,5 +14,5 @@ deps += ['bus_pci',
 	'mbuf',
 	'rawdev']
 
-install_headers('rte_ioat_rawdev.h',
+headers = files('rte_ioat_rawdev.h',
 		'rte_ioat_rawdev_fns.h')
diff --git a/drivers/raw/ntb/meson.build b/drivers/raw/ntb/meson.build
index 2926193a0a..1b7c6eb449 100644
--- a/drivers/raw/ntb/meson.build
+++ b/drivers/raw/ntb/meson.build
@@ -5,4 +5,4 @@ deps += ['rawdev', 'mbuf', 'mempool',
 	 'pci', 'bus_pci']
 sources = files('ntb.c',
                 'ntb_hw_intel.c')
-install_headers('rte_pmd_ntb.h')
+headers = files('rte_pmd_ntb.h')
