diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index c960727d1..1f3fb7777 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2656,23 +2656,27 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
         # Alias that runs the target defined above
         self.create_target_alias('meson-scan-build')
 
-    def generate_clangformat(self):
-        target_name = 'clang-format'
-        if not environment.detect_clangformat():
+    def generate_clangtool(self, name):
+        import shutil
+        target_name = 'clang-' + name
+        if not os.path.exists(os.path.join(self.environment.source_dir, '.clang-' + name)) and \
+                not os.path.exists(os.path.join(self.environment.source_dir, '_clang-' + name)):
             return
-        if not os.path.exists(os.path.join(self.environment.source_dir, '.clang-format')) and \
-                not os.path.exists(os.path.join(self.environment.source_dir, '_clang-format')):
-            return
-        if 'target_name' in self.all_outputs:
+        if target_name in self.all_outputs:
             return
         cmd = self.environment.get_build_command() + \
-            ['--internal', 'clangformat', self.environment.source_dir, self.environment.build_dir]
+            ['--internal', 'clang' + name, self.environment.source_dir, self.environment.build_dir]
         elem = NinjaBuildElement(self.all_outputs, 'meson-' + target_name, 'CUSTOM_COMMAND', 'PHONY')
         elem.add_item('COMMAND', cmd)
         elem.add_item('pool', 'console')
         self.add_build(elem)
         self.create_target_alias('meson-' + target_name)
 
+    def generate_clangformat(self):
+        if not environment.detect_clangformat():
+            return
+        self.generate_clangtool('format')
+
     # For things like scan-build and other helper tools we might have.
     def generate_utils(self):
         self.generate_scanbuild()