endef
 
 define do_install
-       if [ ! -d '$(DESTDIR_SQ)$2' ]; then             \
-               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \
-       fi;                                             \
-       $(INSTALL) $1 $(if $3,-m $3,) '$(DESTDIR_SQ)$2'
+       if [ ! -d '$2' ]; then             \
+               $(INSTALL) -d -m 755 '$2'; \
+       fi;                                \
+       $(INSTALL) $1 $(if $3,-m $3,) '$2'
 endef
 
 install_lib: libs
                $(call do_install_mkdir,$(libdir_SQ)); \
                cp -fpR $(LIBPERF_ALL) $(DESTDIR)$(libdir_SQ)
 
-install_headers:
-       $(call QUIET_INSTALL, libperf_headers) \
-               $(call do_install,include/perf/bpf_perf.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/perf/core.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/perf/cpumap.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/perf/threadmap.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/perf/evlist.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/perf/evsel.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/perf/event.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/perf/mmap.h,$(prefix)/include/perf,644); \
-               $(call do_install,include/internal/cpumap.h,$(prefix)/include/internal,644); \
-               $(call do_install,include/internal/evlist.h,$(prefix)/include/internal,644); \
-               $(call do_install,include/internal/evsel.h,$(prefix)/include/internal,644); \
-               $(call do_install,include/internal/lib.h,$(prefix)/include/internal,644); \
-               $(call do_install,include/internal/mmap.h,$(prefix)/include/internal,644); \
-               $(call do_install,include/internal/threadmap.h,$(prefix)/include/internal,644); \
-               $(call do_install,include/internal/xyarray.h,$(prefix)/include/internal,644);
+HDRS := bpf_perf.h core.h cpumap.h threadmap.h evlist.h evsel.h event.h mmap.h
+INTERNAL_HDRS := cpumap.h evlist.h evsel.h lib.h mmap.h threadmap.h xyarray.h
+
+INSTALL_HDRS_PFX := $(DESTDIR)$(prefix)/include/perf
+INSTALL_HDRS := $(addprefix $(INSTALL_HDRS_PFX)/, $(HDRS))
+INSTALL_INTERNAL_HDRS_PFX := $(DESTDIR)$(prefix)/include/internal
+INSTALL_INTERNAL_HDRS := $(addprefix $(INSTALL_INTERNAL_HDRS_PFX)/, $(INTERNAL_HDRS))
+
+$(INSTALL_HDRS): $(INSTALL_HDRS_PFX)/%.h: include/perf/%.h
+       $(call QUIET_INSTALL, $@) \
+               $(call do_install,$<,$(INSTALL_HDRS_PFX)/,644)
+
+$(INSTALL_INTERNAL_HDRS): $(INSTALL_INTERNAL_HDRS_PFX)/%.h: include/internal/%.h
+       $(call QUIET_INSTALL, $@) \
+               $(call do_install,$<,$(INSTALL_INTERNAL_HDRS_PFX)/,644)
+
+install_headers: $(INSTALL_HDRS) $(INSTALL_INTERNAL_HDRS)
+       $(call QUIET_INSTALL, libperf_headers)
 
 install_pkgconfig: $(LIBPERF_PC)
        $(call QUIET_INSTALL, $(LIBPERF_PC)) \