diff --git a/shake-ext.cabal b/shake-ext.cabal
--- a/shake-ext.cabal
+++ b/shake-ext.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: shake-ext
-version: 2.11.0.0
+version: 2.11.0.1
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
@@ -45,6 +45,7 @@
     build-depends:
         base >=4.11 && <5,
         Cabal >=2.2,
+        cdeps,
         composition-prelude -any,
         cpphs -any,
         directory -any,
@@ -56,4 +57,3 @@
     
     if impl(ghc >=8.0)
         ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wcompat
diff --git a/src/Development/Shake/C.hs b/src/Development/Shake/C.hs
--- a/src/Development/Shake/C.hs
+++ b/src/Development/Shake/C.hs
@@ -18,11 +18,12 @@
                            , staticLibA
                            , sharedLibA
                            , stripA
+                           -- * Reëxports from "Language.C.Dependency"
+                           , getCDepends
                            -- * Helper functions
                            , cconfigToArgs
                            , ccToString
                            , ccFromString
-                           , getCDepends
                            , host
                            ) where
 
@@ -30,11 +31,9 @@
 import           Data.List                  (isPrefixOf, isSuffixOf)
 import           Development.Shake
 import           Development.Shake.FilePath
-import           System.Directory           (removeFile)
+import           Language.C.Dependency
 import           System.Info
 
--- cmake?? make (??)
-
 -- | Given a package name or path to a @.pc@ file, output flags for C compiler.
 pkgConfig :: String -> Action [String]
 pkgConfig pkg = do
@@ -42,18 +41,6 @@
     (Stdout o') <- command [] "pkg-config" ["--libs", pkg]
     pure (words o <> words o')
 
--- | Given C source code, return a list of included files. This writes to a file
--- and then makes a call to either @clang@ or @gcc@, so it should be used
--- sparingly.
-getCDepends :: CCompiler -- ^ Should be either @gcc@ or @clang@.
-            -> String -- ^ C source code
-            -> Action [FilePath]
-getCDepends cc' src = do
-    liftIO $ writeFile "shake.c" src
-    (Stdout o) <- command [] (ccToString cc') ["-MM", "shake.c"]
-    liftIO $ removeFile "shake.c"
-    pure (drop 1 . filter (/= "/") $ words o)
-
 mkQualified :: Monoid a => Maybe a -> Maybe a -> a -> a
 mkQualified pre suff = h [f suff, g pre]
     where g = maybe id mappend
@@ -96,6 +83,7 @@
 -- fails.
 ccFromString :: String -> CCompiler
 ccFromString "gcc" = GCC Nothing
+ccFromString "ccomp" = CompCert
 ccFromString "clang" = Clang
 ccFromString "ghc" = GHC Nothing Nothing
 ccFromString s
@@ -104,6 +92,8 @@
     | "ghc" `isPrefixOf` s = GHC Nothing (Just (drop 3 s))
 ccFromString _ = Other "cc"
 
+-- ALSO consider using Haskell -> C -> ICC ??
+-- TODO ICC??
 -- | A data type representing the C compiler to be used.
 data CCompiler = GCC { _prefix :: Maybe String -- ^ Usually the target triple
                      }
