diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # shake-ats
 
+## 1.10.4.1
+
+  * Only track C dependencies that exist
+
 ## 1.10.4.0
 
   * Track C dependencies as well.
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.4.0
+version:         1.10.4.1
 license:         BSD3
 license-file:    LICENSE
 copyright:       Copyright: (c) 2018-2019 Vanessa McHale
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
@@ -233,8 +233,8 @@
     maybeError p err
     let dir = takeDirectory p
     let (atsDeps, cBlocks) = getDependenciesC ats
-    let preCDeps = cIncls cBlocks
-    cDeps <- foldMapA (getAll ["."]) preCDeps
+    preCDeps <- filterM doesFileExist' $ cIncls cBlocks
+    cDeps <- filterM doesFileExist' =<< foldMapA (getAll ["."]) preCDeps
     deps <- filterM existsAndNotGen $ fixDir dir . trim <$> atsDeps
     deps' <- transitiveDeps gen deps
     pure $ (p:deps) ++ deps' ++ preCDeps ++ cDeps
@@ -244,3 +244,4 @@
           cIncls cBlocks = concat $ fromRight [] $
                 traverse getIncludesStr cBlocks
           foldMapA = (fmap fold .) . traverse
+          doesFileExist' = liftIO . doesFileExist
