diff --git a/Shakefile.hs b/Shakefile.hs
--- a/Shakefile.hs
+++ b/Shakefile.hs
@@ -27,13 +27,13 @@
 
   -- | Stack rules.
   --
-  stackRules "shakers" pats
+  stackRules pats
 
   -- | sanity
   --
   fake' pats "sanity" $ const $
-    need [ fakeFile "build-error", "lint" ]
+    need [ fakeFile "build-error", fakeFile "lint" ]
 
   -- | Default things to run.
   --
-  want [ "build-error", "lint", "format" ]
+  want [ fakeFile "sanity", fakeFile "format" ]
diff --git a/shakers.cabal b/shakers.cabal
--- a/shakers.cabal
+++ b/shakers.cabal
@@ -1,5 +1,5 @@
 name:                  shakers
-version:               0.0.14
+version:               0.0.15
 synopsis:              Shake helpers.
 description:           Primitive helpers for Shake files.
 homepage:              https://github.com/swift-nav/shakers
@@ -17,7 +17,7 @@
   exposed-modules:     Development.Shakers
   default-language:    Haskell2010
   ghc-options:         -Wall
-  build-depends:       base >= 4.8 && < 4.9
+  build-depends:       base == 4.8.*
                      , basic-prelude
                      , directory
                      , shake
@@ -25,7 +25,7 @@
 executable shake-shakers
   main-is:             Shakefile.hs
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
-  build-depends:       base >= 4.8 && < 4.9
+  build-depends:       base
                      , shakers
   default-language:    Haskell2010
 
diff --git a/src/Development/Shakers.hs b/src/Development/Shakers.hs
--- a/src/Development/Shakers.hs
+++ b/src/Development/Shakers.hs
@@ -46,6 +46,7 @@
   , mirror
   , getHashedVersion
   , stackRules
+  , stackTargetRules
   , cabalRules
   , dbRules
   , dockerRules
@@ -387,51 +388,100 @@
 
 -- | Stack rules.
 --
-stackRules :: String -> [FilePattern] -> Rules ()
-stackRules target pats = do
+stackRules :: [FilePattern] -> Rules ()
+stackRules pats = do
   -- | build
   --
   fake' pats "build" $ const $
-    stack_ [ "build", target, "--fast" ]
+    stack_ [ "build", "--fast" ]
 
   -- | build-error
   --
   fake' pats "build-error" $ const $
-    stack_ [ "build", target, "--fast", "--ghc-options=-Werror" ]
+    stack_ [ "build", "--fast", "--ghc-options=-Werror" ]
 
   -- | build-tests
   --
   fake' pats "build-tests" $ const $
-    stack_ [ "build", target, "--fast", "--test", "--no-run-tests" ]
+    stack_ [ "build", "--fast", "--test", "--no-run-tests" ]
 
   -- | build-tests-error
   --
   fake' pats "build-tests-error" $ const $
-    stack_ [ "build", target, "--fast", "--test", "--no-run-tests", "--ghc-options=-Werror" ]
+    stack_ [ "build", "--fast", "--test", "--no-run-tests", "--ghc-options=-Werror" ]
 
   -- | install
   --
   fake' pats "install" $ const $
-    stack_ [ "build", target, "--fast", "--copy-bins" ]
+    stack_ [ "build", "--fast", "--copy-bins" ]
 
   -- | tests
   --
   phony "tests" $
-    stack_ [ "build", target, "--fast", "--test" ]
+    stack_ [ "build", "--fast", "--test" ]
 
   -- | tests-error
   --
   phony "tests-error" $
-    stack_ [ "build", target, "--fast", "--test", "--ghc-options=-Werror" ]
+    stack_ [ "build", "--fast", "--test", "--ghc-options=-Werror" ]
 
   -- | ghci
   --
   phony "ghci" $
-    stack_ [ "ghci", target, "--fast" ]
+    stack_ [ "ghci", "--fast" ]
 
   -- | ghci-tests
   --
   phony "ghci-tests" $
+    stack_ [ "ghci", "--fast", "--test" ]
+
+-- | Stack rules.
+--
+stackTargetRules :: String -> [FilePattern] -> Rules ()
+stackTargetRules target pats = do
+  -- | build
+  --
+  fake' pats ("build:" <> target) $ const $
+    stack_ [ "build", target, "--fast" ]
+
+  -- | build-error
+  --
+  fake' pats ("build-error:" <> target) $ const $
+    stack_ [ "build", target, "--fast", "--ghc-options=-Werror" ]
+
+  -- | build-tests
+  --
+  fake' pats ("build-tests:" <> target) $ const $
+    stack_ [ "build", target, "--fast", "--test", "--no-run-tests" ]
+
+  -- | build-tests-error
+  --
+  fake' pats ("build-tests-error:" <> target) $ const $
+    stack_ [ "build", target, "--fast", "--test", "--no-run-tests", "--ghc-options=-Werror" ]
+
+  -- | install
+  --
+  fake' pats ("install:" <> target) $ const $
+    stack_ [ "build", target, "--fast", "--copy-bins" ]
+
+  -- | tests
+  --
+  phony ("tests:" <> target) $
+    stack_ [ "build", target, "--fast", "--test" ]
+
+  -- | tests-error
+  --
+  phony ("tests-error:" <> target) $
+    stack_ [ "build", target, "--fast", "--test", "--ghc-options=-Werror" ]
+
+  -- | ghci
+  --
+  phony ("ghci:" <> target) $
+    stack_ [ "ghci", target, "--fast" ]
+
+  -- | ghci-tests
+  --
+  phony ("ghci-tests:" <> target) $
     stack_ [ "ghci", target, "--fast", "--test" ]
 
 -- | Cabal and hackage rules.
