Merge topic 'refactor_file_extension_queries'

7628153edb Refactor file extension queries to be more consistent

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4925
diff --git a/Modules/CMakePlatformId.h.in b/Modules/CMakePlatformId.h.in
index 64a00b3..40668a3 100644
--- a/Modules/CMakePlatformId.h.in
+++ b/Modules/CMakePlatformId.h.in
@@ -87,6 +87,9 @@
 # elif defined(__WINDOWS__)
 #  define PLATFORM_ID "Windows3x"
 
+# elif defined(__VXWORKS__)
+#  define PLATFORM_ID "VxWorks"
+
 # else /* unknown platform */
 #  define PLATFORM_ID
 # endif
diff --git a/Modules/FindBISON.cmake b/Modules/FindBISON.cmake
index 6b5828e..1e1a5a3 100644
--- a/Modules/FindBISON.cmake
+++ b/Modules/FindBISON.cmake
@@ -82,7 +82,7 @@
   add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})
 #]=======================================================================]
 
-find_program(BISON_EXECUTABLE NAMES bison win_bison DOC "path to the bison executable")
+find_program(BISON_EXECUTABLE NAMES bison win-bison win_bison DOC "path to the bison executable")
 mark_as_advanced(BISON_EXECUTABLE)
 
 if(BISON_EXECUTABLE)
diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake
index e1af2d6..a93d4fd 100644
--- a/Modules/FindCUDA.cmake
+++ b/Modules/FindCUDA.cmake
@@ -357,7 +357,8 @@
   CUDA_nppicc_LIBRARY   -- NVIDIA Performance Primitives lib (image processing).
                            Only available for CUDA version 9.0.
   CUDA_nppicom_LIBRARY  -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
+                           Only available for CUDA version 9.0 - 10.2.
+                           Replaced by nvjpeg.
   CUDA_nppidei_LIBRARY  -- NVIDIA Performance Primitives lib (image processing).
                            Only available for CUDA version 9.0.
   CUDA_nppif_LIBRARY    -- NVIDIA Performance Primitives lib (image processing).
@@ -1002,7 +1003,9 @@
   find_cuda_helper_libs(nppc)
   find_cuda_helper_libs(nppial)
   find_cuda_helper_libs(nppicc)
-  find_cuda_helper_libs(nppicom)
+  if(CUDA_VERSION VERSION_LESS "11.0")
+    find_cuda_helper_libs(nppicom)
+  endif()
   find_cuda_helper_libs(nppidei)
   find_cuda_helper_libs(nppif)
   find_cuda_helper_libs(nppig)
diff --git a/Modules/FindFLEX.cmake b/Modules/FindFLEX.cmake
index 90e5f86..1384736 100644
--- a/Modules/FindFLEX.cmake
+++ b/Modules/FindFLEX.cmake
@@ -99,7 +99,7 @@
   ====================================================================
 #]=======================================================================]
 
-find_program(FLEX_EXECUTABLE NAMES flex win_flex DOC "path to the flex executable")
+find_program(FLEX_EXECUTABLE NAMES flex win-flex win_flex DOC "path to the flex executable")
 mark_as_advanced(FLEX_EXECUTABLE)
 
 find_library(FL_LIBRARY NAMES fl
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 1d3dcce..f3c7db0 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,7 +1,7 @@
 # CMake version number components.
 set(CMake_VERSION_MAJOR 3)
 set(CMake_VERSION_MINOR 18)
-set(CMake_VERSION_PATCH 20200619)
+set(CMake_VERSION_PATCH 20200623)
 #set(CMake_VERSION_RC 0)
 set(CMake_VERSION_IS_DIRTY 0)
 
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 677bc0f..7fbe90e 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -165,61 +165,66 @@
   std::string RequiredValue;
   std::string ExtensionValue;
 };
-}
 
-static std::string const kCMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN =
-  "CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN";
-static std::string const kCMAKE_C_COMPILER_TARGET = "CMAKE_C_COMPILER_TARGET";
-static std::string const kCMAKE_C_LINK_NO_PIE_SUPPORTED =
-  "CMAKE_C_LINK_NO_PIE_SUPPORTED";
-static std::string const kCMAKE_C_LINK_PIE_SUPPORTED =
-  "CMAKE_C_LINK_PIE_SUPPORTED";
-static std::string const kCMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN =
-  "CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN";
-static std::string const kCMAKE_CXX_COMPILER_TARGET =
-  "CMAKE_CXX_COMPILER_TARGET";
-static std::string const kCMAKE_CXX_LINK_NO_PIE_SUPPORTED =
-  "CMAKE_CXX_LINK_NO_PIE_SUPPORTED";
-static std::string const kCMAKE_CXX_LINK_PIE_SUPPORTED =
-  "CMAKE_CXX_LINK_PIE_SUPPORTED";
-static std::string const kCMAKE_CUDA_ARCHITECTURES =
-  "CMAKE_CUDA_ARCHITECTURES";
-static std::string const kCMAKE_CUDA_COMPILER_TARGET =
-  "CMAKE_CUDA_COMPILER_TARGET";
-static std::string const kCMAKE_CUDA_RUNTIME_LIBRARY =
-  "CMAKE_CUDA_RUNTIME_LIBRARY";
-static std::string const kCMAKE_ENABLE_EXPORTS = "CMAKE_ENABLE_EXPORTS";
-static std::string const kCMAKE_LINK_SEARCH_END_STATIC =
+constexpr size_t lang_property_start = 0;
+constexpr size_t lang_property_size = 4;
+constexpr size_t pie_property_start = 4;
+constexpr size_t pie_property_size = 2;
+#define SETUP_LANGUAGE(name, lang)                                            \
+  static const std::string name[lang_property_size + pie_property_size + 1] = \
+    { "CMAKE_" #lang "_COMPILER_EXTERNAL_TOOLCHAIN",                          \
+      "CMAKE_" #lang "_COMPILER_TARGET",                                      \
+      "CMAKE_" #lang "_LINK_NO_PIE_SUPPORTED",                                \
+      "CMAKE_" #lang "_PIE_SUPPORTED", "" }
+
+// NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
+SETUP_LANGUAGE(c_properties, C);
+// NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
+SETUP_LANGUAGE(cxx_properties, CXX);
+
+// NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
+SETUP_LANGUAGE(cuda_properties, CUDA);
+// NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
+SETUP_LANGUAGE(fortran_properties, Fortran);
+// NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
+SETUP_LANGUAGE(objc_properties, OBJC);
+// NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
+SETUP_LANGUAGE(objcxx_properties, OBJCXX);
+// NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
+SETUP_LANGUAGE(swift_properties, Swift);
+#undef SETUP_LANGUAGE
+
+std::string const kCMAKE_CUDA_ARCHITECTURES = "CMAKE_CUDA_ARCHITECTURES";
+std::string const kCMAKE_CUDA_RUNTIME_LIBRARY = "CMAKE_CUDA_RUNTIME_LIBRARY";
+std::string const kCMAKE_ENABLE_EXPORTS = "CMAKE_ENABLE_EXPORTS";
+std::string const kCMAKE_LINK_SEARCH_END_STATIC =
   "CMAKE_LINK_SEARCH_END_STATIC";
-static std::string const kCMAKE_LINK_SEARCH_START_STATIC =
+std::string const kCMAKE_LINK_SEARCH_START_STATIC =
   "CMAKE_LINK_SEARCH_START_STATIC";
-static std::string const kCMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT =
+std::string const kCMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT =
   "CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT";
-static std::string const kCMAKE_OSX_ARCHITECTURES = "CMAKE_OSX_ARCHITECTURES";
-static std::string const kCMAKE_OSX_DEPLOYMENT_TARGET =
-  "CMAKE_OSX_DEPLOYMENT_TARGET";
-static std::string const kCMAKE_OSX_SYSROOT = "CMAKE_OSX_SYSROOT";
-static std::string const kCMAKE_APPLE_ARCH_SYSROOTS =
-  "CMAKE_APPLE_ARCH_SYSROOTS";
-static std::string const kCMAKE_POSITION_INDEPENDENT_CODE =
+std::string const kCMAKE_OSX_ARCHITECTURES = "CMAKE_OSX_ARCHITECTURES";
+std::string const kCMAKE_OSX_DEPLOYMENT_TARGET = "CMAKE_OSX_DEPLOYMENT_TARGET";
+std::string const kCMAKE_OSX_SYSROOT = "CMAKE_OSX_SYSROOT";
+std::string const kCMAKE_APPLE_ARCH_SYSROOTS = "CMAKE_APPLE_ARCH_SYSROOTS";
+std::string const kCMAKE_POSITION_INDEPENDENT_CODE =
   "CMAKE_POSITION_INDEPENDENT_CODE";
-static std::string const kCMAKE_SYSROOT = "CMAKE_SYSROOT";
-static std::string const kCMAKE_SYSROOT_COMPILE = "CMAKE_SYSROOT_COMPILE";
-static std::string const kCMAKE_SYSROOT_LINK = "CMAKE_SYSROOT_LINK";
-static std::string const kCMAKE_Swift_COMPILER_TARGET =
-  "CMAKE_Swift_COMPILER_TARGET";
-static std::string const kCMAKE_TRY_COMPILE_OSX_ARCHITECTURES =
+std::string const kCMAKE_SYSROOT = "CMAKE_SYSROOT";
+std::string const kCMAKE_SYSROOT_COMPILE = "CMAKE_SYSROOT_COMPILE";
+std::string const kCMAKE_SYSROOT_LINK = "CMAKE_SYSROOT_LINK";
+std::string const kCMAKE_TRY_COMPILE_OSX_ARCHITECTURES =
   "CMAKE_TRY_COMPILE_OSX_ARCHITECTURES";
-static std::string const kCMAKE_TRY_COMPILE_PLATFORM_VARIABLES =
+std::string const kCMAKE_TRY_COMPILE_PLATFORM_VARIABLES =
   "CMAKE_TRY_COMPILE_PLATFORM_VARIABLES";
-static std::string const kCMAKE_WARN_DEPRECATED = "CMAKE_WARN_DEPRECATED";
+std::string const kCMAKE_WARN_DEPRECATED = "CMAKE_WARN_DEPRECATED";
 
 /* GHS Multi platform variables */
-static std::set<std::string> ghs_platform_vars{
+std::set<std::string> const ghs_platform_vars{
   "GHS_TARGET_PLATFORM", "GHS_PRIMARY_TARGET", "GHS_TOOLSET_ROOT",
   "GHS_OS_ROOT",         "GHS_OS_DIR",         "GHS_BSP_NAME",
   "GHS_OS_DIR_OPTION"
 };
+}
 
 int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
                                      bool isTryRun)
@@ -683,12 +688,23 @@
     // Forward a set of variables to the inner project cache.
     {
       std::set<std::string> vars;
-      vars.insert(kCMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN);
-      vars.insert(kCMAKE_C_COMPILER_TARGET);
-      vars.insert(kCMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN);
-      vars.insert(kCMAKE_CXX_COMPILER_TARGET);
+      vars.insert(&c_properties[lang_property_start],
+                  &c_properties[lang_property_start + lang_property_size]);
+      vars.insert(&cxx_properties[lang_property_start],
+                  &cxx_properties[lang_property_start + lang_property_size]);
+      vars.insert(&cuda_properties[lang_property_start],
+                  &cuda_properties[lang_property_start + lang_property_size]);
+      vars.insert(
+        &fortran_properties[lang_property_start],
+        &fortran_properties[lang_property_start + lang_property_size]);
+      vars.insert(&objc_properties[lang_property_start],
+                  &objc_properties[lang_property_start + lang_property_size]);
+      vars.insert(
+        &objcxx_properties[lang_property_start],
+        &objcxx_properties[lang_property_start + lang_property_size]);
+      vars.insert(&swift_properties[lang_property_start],
+                  &swift_properties[lang_property_start + lang_property_size]);
       vars.insert(kCMAKE_CUDA_ARCHITECTURES);
-      vars.insert(kCMAKE_CUDA_COMPILER_TARGET);
       vars.insert(kCMAKE_CUDA_RUNTIME_LIBRARY);
       vars.insert(kCMAKE_ENABLE_EXPORTS);
       vars.insert(kCMAKE_LINK_SEARCH_END_STATIC);
@@ -701,7 +717,6 @@
       vars.insert(kCMAKE_SYSROOT);
       vars.insert(kCMAKE_SYSROOT_COMPILE);
       vars.insert(kCMAKE_SYSROOT_LINK);
-      vars.insert(kCMAKE_Swift_COMPILER_TARGET);
       vars.insert(kCMAKE_WARN_DEPRECATED);
       vars.emplace("CMAKE_MSVC_RUNTIME_LIBRARY"_s);
 
@@ -715,10 +730,22 @@
           cmPolicies::NEW) {
         // To ensure full support of PIE, propagate cache variables
         // driving the link options
-        vars.insert(kCMAKE_C_LINK_PIE_SUPPORTED);
-        vars.insert(kCMAKE_C_LINK_NO_PIE_SUPPORTED);
-        vars.insert(kCMAKE_CXX_LINK_PIE_SUPPORTED);
-        vars.insert(kCMAKE_CXX_LINK_NO_PIE_SUPPORTED);
+        vars.insert(&c_properties[pie_property_start],
+                    &c_properties[pie_property_start + pie_property_size]);
+        vars.insert(&cxx_properties[pie_property_start],
+                    &cxx_properties[pie_property_start + pie_property_size]);
+        vars.insert(&cuda_properties[pie_property_start],
+                    &cuda_properties[pie_property_start + pie_property_size]);
+        vars.insert(
+          &fortran_properties[pie_property_start],
+          &fortran_properties[pie_property_start + pie_property_size]);
+        vars.insert(&objc_properties[pie_property_start],
+                    &objc_properties[pie_property_start + pie_property_size]);
+        vars.insert(
+          &objcxx_properties[pie_property_start],
+          &objcxx_properties[pie_property_start + pie_property_size]);
+        vars.insert(&swift_properties[pie_property_start],
+                    &swift_properties[pie_property_start + pie_property_size]);
       }
 
       /* for the TRY_COMPILEs we want to be able to specify the architecture.
diff --git a/Source/cmLinkItemGraphVisitor.cxx b/Source/cmLinkItemGraphVisitor.cxx
index acc23c8..b13def8 100644
--- a/Source/cmLinkItemGraphVisitor.cxx
+++ b/Source/cmLinkItemGraphVisitor.cxx
@@ -24,10 +24,6 @@
 void cmLinkItemGraphVisitor::VisitLinks(cmLinkItem const& item,
                                         cmLinkItem const& rootItem)
 {
-  if (this->LinkVisited(item, rootItem)) {
-    return;
-  }
-
   if (item.Target == nullptr) {
     return;
   }
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 4545a8e..de1461a 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -713,9 +713,10 @@
     // "VERBOSE=1" to be added as a make variable which will change the
     // name of this special target.  This gives a make-time choice to
     // the user.
-    this->WriteMakeRule(makefileStream,
-                        "Suppress display of executed commands.",
-                        "$(VERBOSE).SILENT", no_depends, no_commands, false);
+    // Write directly to the stream since WriteMakeRule escapes '$'.
+    makefileStream << "#Suppress display of executed commands.\n"
+                      "$(VERBOSE).SILENT:\n"
+                      "\n";
   }
 
   // Work-around for makes that drop rules that have no dependencies
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 2b343d2..1c88cd5 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -349,7 +349,6 @@
   # add a bunch of standard build-and-test style tests
   ADD_TEST_MACRO(CommandLineTest CommandLineTest)
   ADD_TEST_MACRO(FindPackageTest FindPackageTest)
-  ADD_TEST_MACRO(FindModulesExecuteAll FindModulesExecuteAll)
   ADD_TEST_MACRO(StringFileTest StringFileTest)
   ADD_TEST_MACRO(TryCompile TryCompile)
   ADD_TEST_MACRO(SystemInformation SystemInformation)
diff --git a/Tests/FindModulesExecuteAll/CMakeLists.txt b/Tests/FindModulesExecuteAll/CMakeLists.txt
deleted file mode 100644
index 4893bb3..0000000
--- a/Tests/FindModulesExecuteAll/CMakeLists.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-# This file includes all FindXXX.cmake modules, so they are all executed.
-# As it is it doesn't test a lot.
-# It makes sure that the modules don't contain basic syntax errors.
-# It also makes sure that modules don't fail with an error if something
-# wasn't found but REQUIRED was not given.
-#
-# I guess more things could be added, like checking whether variables are
-# defined after running the modules (e.g. FOO_FOUND etc.).
-cmake_minimum_required(VERSION 2.8.4) # new enough for CMP0017
-project(FindModulesExecuteAll)
-
-file(GLOB all_modules "${CMAKE_CURRENT_SOURCE_DIR}/../../Modules/Find*cmake")
-
-foreach(module ${all_modules})
-  message(STATUS "module: ${module}")
-  include("${module}")
-
-  # get the "basename" of the package, so the existence of variables like
-  # FOO_FOUND could be tested later on, Alex
-  string(REGEX REPLACE ".+Find([^\\.]+)\\.cmake" "\\1" packageName "${module}")
-  string(TOUPPER "${packageName}" packageNameUpper)
-
-# disabled for now, since too many modules break:
-#  if(NOT DEFINED ${packageNameUpper}_FOUND)
-#    message(SEND_ERROR "${packageNameUpper}_FOUND not defined !")
-#  endif()
-
-endforeach()
-
-add_executable(FindModulesExecuteAll main.c)
diff --git a/Tests/FindModulesExecuteAll/main.c b/Tests/FindModulesExecuteAll/main.c
deleted file mode 100644
index f8b643a..0000000
--- a/Tests/FindModulesExecuteAll/main.c
+++ /dev/null
@@ -1,4 +0,0 @@
-int main()
-{
-  return 0;
-}
diff --git a/Tests/RunCMake/Graphviz/GraphvizTestProject.cmake b/Tests/RunCMake/Graphviz/GraphvizTestProject.cmake
index 10cd2bc..4ce6b5c 100644
--- a/Tests/RunCMake/Graphviz/GraphvizTestProject.cmake
+++ b/Tests/RunCMake/Graphviz/GraphvizTestProject.cmake
@@ -9,6 +9,7 @@
 #   - All library depend on a common INTERFACE library holding compiler flags
 #   - We have a custom target to generate a man page
 #   - Someone has added an UNKNOWN, IMPORTED crypto mining library!
+#   - We have a circular dependency between two libraries
 
 add_subdirectory(test_project/third_party_project)
 
@@ -23,6 +24,13 @@
 
 target_link_libraries(CoreLibrary PRIVATE SeriousLoggingLibrary)
 
+add_library(SystemLibrary STATIC test_project/system_library.c)
+
+# Create a circular dependency.
+# See https://gitlab.kitware.com/cmake/cmake/issues/20720
+target_link_libraries(CoreLibrary PRIVATE SystemLibrary)
+target_link_libraries(SystemLibrary PRIVATE CoreLibrary)
+
 add_library(GraphicLibraryObjects OBJECT test_project/graphic_library.c)
 
 add_library(GraphicLibrary SHARED)
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_custom_targets.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_custom_targets.dot
index 8b0365a..31d88df 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_custom_targets.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_custom_targets.dot
@@ -28,25 +28,28 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GenerateManPage", shape = box ];
-    "node1" -> "node5"  // ConsoleApplication -> GenerateManPage
-    "node6" [ label = "GraphicApplication", shape = egg ];
-    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node8" [ label = "\"-lm\"", shape = septagon ];
-    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node9" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node7" -> "node9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node10" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node10" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node10" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node11" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node11" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node11" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GenerateManPage", shape = box ];
+    "node1" -> "node6"  // ConsoleApplication -> GenerateManPage
+    "node7" [ label = "GraphicApplication", shape = egg ];
+    "node7" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node8" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node9" [ label = "\"-lm\"", shape = septagon ];
+    "node8" -> "node9" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node8" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node8" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node10" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node8" -> "node10" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node7" -> "node8" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node11" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node11" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node11" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node12" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node12" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node12" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_default_options.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_default_options.dot
index 1bbf25a..26f2f64 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_default_options.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_default_options.dot
@@ -28,23 +28,26 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node7" [ label = "\"-lm\"", shape = septagon ];
-    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node6" -> "node8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node8" [ label = "\"-lm\"", shape = septagon ];
+    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node9" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node7" -> "node9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node10" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node11" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node11" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node11" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_dependers_files.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_dependers_files.dot
index 1bbf25a..26f2f64 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_dependers_files.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_dependers_files.dot
@@ -28,23 +28,26 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node7" [ label = "\"-lm\"", shape = septagon ];
-    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node6" -> "node8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node8" [ label = "\"-lm\"", shape = septagon ];
+    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node9" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node7" -> "node9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node10" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node11" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node11" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node11" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_executables.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_executables.dot
index 558a470..7f2e01c 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_executables.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_executables.dot
@@ -27,18 +27,21 @@
     "node1" -> "node0"  // CoreLibrary -> CompilerFlags
     "node2" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node1" -> "node2" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
-    "node3" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node4" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node5" [ label = "\"-lm\"", shape = septagon ];
-    "node4" -> "node5" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node4" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node4" -> "node1" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node6" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node4" -> "node6" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node7" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node7" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node7" -> "node1" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node8" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node8" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node8" -> "node1" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node3" [ label = "SystemLibrary", shape = octagon ];
+    "node3" -> "node1" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node1" -> "node3" [ style = dotted ] // CoreLibrary -> SystemLibrary
+    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node5" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node6" [ label = "\"-lm\"", shape = septagon ];
+    "node5" -> "node6" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node5" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node5" -> "node1" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node7" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node5" -> "node7" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node8" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node8" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node8" -> "node1" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node9" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node9" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node9" -> "node1" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_external_libs.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_external_libs.dot
index 660af37..db675a8 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_external_libs.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_external_libs.dot
@@ -28,19 +28,22 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "GraphicApplication", shape = egg ];
-    "node4" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node5" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node5" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node5" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node6" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node5" -> "node6" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node4" -> "node5" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node7" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node7" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node7" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node8" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node8" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node8" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "GraphicApplication", shape = egg ];
+    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node7" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node8" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node8" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node8" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node9" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node9" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node9" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_graphic_libs.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_graphic_libs.dot
index 5af7fec..234ee39 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_graphic_libs.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_graphic_libs.dot
@@ -28,8 +28,11 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "\"-lm\"", shape = septagon ];
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "\"-lm\"", shape = septagon ];
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_interface_libs.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_interface_libs.dot
index 94ec41c..6dea88c 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_interface_libs.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_interface_libs.dot
@@ -24,20 +24,23 @@
 }
     "node0" [ label = "ConsoleApplication", shape = egg ];
     "node1" [ label = "CoreLibrary", shape = octagon ];
+    "node2" [ label = "SystemLibrary", shape = octagon ];
+    "node2" -> "node1" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node1" -> "node2" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node0" -> "node1" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node2" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node0" -> "node2" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node3" [ label = "GraphicApplication", shape = egg ];
-    "node3" -> "node1" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node4" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node5" [ label = "\"-lm\"", shape = septagon ];
-    "node4" -> "node5" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node4" -> "node1" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node6" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node4" -> "node6" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node3" -> "node4" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node7" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node7" -> "node1" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node8" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node8" -> "node1" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node3" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node0" -> "node3" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node4" [ label = "GraphicApplication", shape = egg ];
+    "node4" -> "node1" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node5" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node6" [ label = "\"-lm\"", shape = septagon ];
+    "node5" -> "node6" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node5" -> "node1" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node7" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node5" -> "node7" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node4" -> "node5" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node8" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node8" -> "node1" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node9" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node9" -> "node1" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_module_libs.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_module_libs.dot
index 65b7a71..df3d10a 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_module_libs.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_module_libs.dot
@@ -28,17 +28,20 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node7" [ label = "\"-lm\"", shape = septagon ];
-    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node6" -> "node8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node8" [ label = "\"-lm\"", shape = septagon ];
+    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node9" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node7" -> "node9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_object_libs.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_object_libs.dot
index 8116bc9..8f832a8 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_object_libs.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_object_libs.dot
@@ -28,21 +28,24 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node7" [ label = "\"-lm\"", shape = septagon ];
-    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node8" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node8" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node8" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node9" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node8" [ label = "\"-lm\"", shape = septagon ];
+    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_per_target_files.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_per_target_files.dot
index 1bbf25a..26f2f64 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_per_target_files.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_per_target_files.dot
@@ -28,23 +28,26 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node7" [ label = "\"-lm\"", shape = septagon ];
-    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node6" -> "node8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node8" [ label = "\"-lm\"", shape = septagon ];
+    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node9" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node7" -> "node9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node10" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node11" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node11" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node11" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_shared_libs.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_shared_libs.dot
index 439d1f7..e127daa 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_shared_libs.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_shared_libs.dot
@@ -28,17 +28,20 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "\"-lm\"", shape = septagon ];
-    "node7" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node8" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node8" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node8" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node9" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "\"-lm\"", shape = septagon ];
+    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_unknown_libs.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_unknown_libs.dot
index 1be6550..4f242bb 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_unknown_libs.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_no_unknown_libs.dot
@@ -28,21 +28,24 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "GraphicApplication", shape = egg ];
-    "node4" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node5" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node6" [ label = "\"-lm\"", shape = septagon ];
-    "node5" -> "node6" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node5" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node5" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node7" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node5" -> "node7" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node4" -> "node5" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node8" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node8" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node8" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node9" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "GraphicApplication", shape = egg ];
+    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node7" [ label = "\"-lm\"", shape = septagon ];
+    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node6" -> "node8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_header.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_header.dot
index 1cfbe0f..c664af8 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_header.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_header.dot
@@ -28,23 +28,26 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node7" [ label = "\"-lm\"", shape = septagon ];
-    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node6" -> "node8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node8" [ label = "\"-lm\"", shape = septagon ];
+    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node9" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node7" -> "node9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node10" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node11" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node11" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node11" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_name.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_name.dot
index 9653c33..5579306 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_name.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_graph_name.dot
@@ -28,23 +28,26 @@
     "node2" -> "node0"  // CoreLibrary -> CompilerFlags
     "node3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "node2" -> "node3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "node4" [ label = "SystemLibrary", shape = octagon ];
+    "node4" -> "node2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "node2" -> "node4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "node1" -> "node2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "node4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "node1" -> "node4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "node5" [ label = "GraphicApplication", shape = egg ];
-    "node5" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "node6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "node7" [ label = "\"-lm\"", shape = septagon ];
-    "node6" -> "node7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "node6" -> "node0"  // GraphicLibrary -> CompilerFlags
-    "node6" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "node8" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "node6" -> "node8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "node5" -> "node6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "node9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "node9" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "node9" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "node10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "node10" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "node10" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "node5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "node1" -> "node5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "node6" [ label = "GraphicApplication", shape = egg ];
+    "node6" -> "node2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "node7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "node8" [ label = "\"-lm\"", shape = septagon ];
+    "node7" -> "node8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "node7" -> "node0"  // GraphicLibrary -> CompilerFlags
+    "node7" -> "node2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "node9" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "node7" -> "node9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "node6" -> "node7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "node10" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "node10" -> "node0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "node10" -> "node2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "node11" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "node11" -> "node0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "node11" -> "node2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_node_prefix.dot b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_node_prefix.dot
index 82d96d0..3bf20ec 100644
--- a/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_node_prefix.dot
+++ b/Tests/RunCMake/Graphviz/expected_outputs/dependency_graph_set_node_prefix.dot
@@ -28,23 +28,26 @@
     "point2" -> "point0"  // CoreLibrary -> CompilerFlags
     "point3" [ label = "GoofyLoggingLibrary\n(SeriousLoggingLibrary)\n(TheBestLoggingLibrary)", shape = pentagon ];
     "point2" -> "point3" [ style = dotted ] // CoreLibrary -> GoofyLoggingLibrary
+    "point4" [ label = "SystemLibrary", shape = octagon ];
+    "point4" -> "point2" [ style = dotted ] // SystemLibrary -> CoreLibrary
+    "point2" -> "point4" [ style = dotted ] // CoreLibrary -> SystemLibrary
     "point1" -> "point2" [ style = dotted ] // ConsoleApplication -> CoreLibrary
-    "point4" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
-    "point1" -> "point4" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
-    "point5" [ label = "GraphicApplication", shape = egg ];
-    "point5" -> "point2" [ style = dotted ] // GraphicApplication -> CoreLibrary
-    "point6" [ label = "GraphicLibrary", shape = doubleoctagon ];
-    "point7" [ label = "\"-lm\"", shape = septagon ];
-    "point6" -> "point7" [ style = dotted ] // GraphicLibrary -> "-lm"
-    "point6" -> "point0"  // GraphicLibrary -> CompilerFlags
-    "point6" -> "point2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
-    "point8" [ label = "GraphicLibraryObjects", shape = hexagon ];
-    "point6" -> "point8" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
-    "point5" -> "point6" [ style = dotted ] // GraphicApplication -> GraphicLibrary
-    "point9" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
-    "point9" -> "point0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
-    "point9" -> "point2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
-    "point10" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
-    "point10" -> "point0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
-    "point10" -> "point2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
+    "point5" [ label = "CryptoCurrencyMiningLibrary", shape = septagon ];
+    "point1" -> "point5" [ style = dotted ] // ConsoleApplication -> CryptoCurrencyMiningLibrary
+    "point6" [ label = "GraphicApplication", shape = egg ];
+    "point6" -> "point2" [ style = dotted ] // GraphicApplication -> CoreLibrary
+    "point7" [ label = "GraphicLibrary", shape = doubleoctagon ];
+    "point8" [ label = "\"-lm\"", shape = septagon ];
+    "point7" -> "point8" [ style = dotted ] // GraphicLibrary -> "-lm"
+    "point7" -> "point0"  // GraphicLibrary -> CompilerFlags
+    "point7" -> "point2" [ style = dotted ] // GraphicLibrary -> CoreLibrary
+    "point9" [ label = "GraphicLibraryObjects", shape = hexagon ];
+    "point7" -> "point9" [ style = dotted ] // GraphicLibrary -> GraphicLibraryObjects
+    "point6" -> "point7" [ style = dotted ] // GraphicApplication -> GraphicLibrary
+    "point10" [ label = "GraphicDriverOpenGL", shape = tripleoctagon ];
+    "point10" -> "point0" [ style = dotted ] // GraphicDriverOpenGL -> CompilerFlags
+    "point10" -> "point2" [ style = dotted ] // GraphicDriverOpenGL -> CoreLibrary
+    "point11" [ label = "GraphicDriverVulkan", shape = tripleoctagon ];
+    "point11" -> "point0" [ style = dotted ] // GraphicDriverVulkan -> CompilerFlags
+    "point11" -> "point2" [ style = dotted ] // GraphicDriverVulkan -> CoreLibrary
 }
diff --git a/Tests/RunCMake/Graphviz/test_project/system_library.c b/Tests/RunCMake/Graphviz/test_project/system_library.c
new file mode 100644
index 0000000..5d67079
--- /dev/null
+++ b/Tests/RunCMake/Graphviz/test_project/system_library.c
@@ -0,0 +1,3 @@
+void initialize_system()
+{
+}