diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # shake-ats
 
+## 1.10.4.0
+
+  * Track C dependencies as well.
+
 ## 1.10.3.0
 
   * Don't copy files to `$PATSHOME`
diff --git a/shake-ats.cabal b/shake-ats.cabal
--- a/shake-ats.cabal
+++ b/shake-ats.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            shake-ats
-version:         1.10.3.0
+version:         1.10.4.0
 license:         BSD3
 license-file:    LICENSE
 copyright:       Copyright: (c) 2018-2019 Vanessa McHale
@@ -41,7 +41,7 @@
     ghc-options:      -Wall
     build-depends:
         base >=4.9 && <5,
-        language-ats -any,
+        language-ats >=1.7.7.0,
         shake-ext >=3.0.0.0,
         hs2ats >=0.5.0.0,
         directory -any,
@@ -51,7 +51,8 @@
         shake >=0.14,
         binary -any,
         shake-cabal -any,
-        shake-c >=0.4.0.0
+        shake-c >=0.4.0.0,
+        cdeps >=0.1.3.0
 
     if flag(development)
         ghc-options: -Werror
diff --git a/src/Development/Shake/ATS.hs b/src/Development/Shake/ATS.hs
--- a/src/Development/Shake/ATS.hs
+++ b/src/Development/Shake/ATS.hs
@@ -49,6 +49,7 @@
 import           Development.Shake.FilePath
 import           Development.Shake.Version
 import           Language.ATS
+import           Language.C.Dependency             (getIncludesStr)
 import           System.Directory                  (doesFileExist)
 import           System.Environment                (getEnv)
 import           System.Exit                       (ExitCode (ExitSuccess))
@@ -231,6 +232,15 @@
     let (ats, err) = (fromRight mempty &&& id) . parseM $ contents
     maybeError p err
     let dir = takeDirectory p
-    deps <- filterM (\f -> ((f `elem` gen) ||) <$> (liftIO . doesFileExist) f) $ fixDir dir . trim <$> getDependencies ats
+    let (atsDeps, cBlocks) = getDependenciesC ats
+    let preCDeps = cIncls cBlocks
+    cDeps <- foldMapA (getAll ["."]) preCDeps
+    deps <- filterM existsAndNotGen $ fixDir dir . trim <$> atsDeps
     deps' <- transitiveDeps gen deps
-    pure $ (p:deps) ++ deps'
+    pure $ (p:deps) ++ deps' ++ preCDeps ++ cDeps
+
+    where existsAndNotGen f = liftIO $
+            do { b <- doesFileExist f ; pure (f `elem` gen || b) }
+          cIncls cBlocks = concat $ fromRight [] $
+                traverse getIncludesStr cBlocks
+          foldMapA = (fmap fold .) . traverse
