diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # CHANGELOG for cabal-toolkit
 
+## 0.0.3
+
+* Add `Program`s for `cmake`/`make`/`ninja` for users who need to compile C/C++.
+
 ## 0.0.2
 
 * Add `getGHCPackageDBFlags` for users working with GHC API.
diff --git a/cabal-toolkit.cabal b/cabal-toolkit.cabal
--- a/cabal-toolkit.cabal
+++ b/cabal-toolkit.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           cabal-toolkit
-version:        0.0.2
+version:        0.0.3
 synopsis:       Helper functions for writing custom Setup.hs scripts.
 category:       Distribution
 stability:      alpha
diff --git a/src/Distribution/Simple/Toolkit.hs b/src/Distribution/Simple/Toolkit.hs
--- a/src/Distribution/Simple/Toolkit.hs
+++ b/src/Distribution/Simple/Toolkit.hs
@@ -31,6 +31,10 @@
   , getLBIProgramOutput
   -- * Convenient functions for working with GHC API
   , getGHCPackageDBFlags
+  -- * Extra 'Program's
+  , cmakeProgram
+  , makeProgram
+  , ninjaProgram
   ) where
 
 import Data.Binary
@@ -41,6 +45,7 @@
 import Distribution.Simple.LocalBuildInfo
 import Distribution.Simple.Program
 import Distribution.Simple.Setup
+import Distribution.System
 import Distribution.Types.BuildInfo
 import Distribution.Types.PackageDescription
 import Distribution.Verbosity
@@ -165,3 +170,23 @@
     isSpecific (SpecificPackageDB _) = True
     isSpecific _ = False
 
+endOfFirstLineVersion :: Verbosity -> FilePath -> IO (Maybe Version)
+endOfFirstLineVersion =
+  findProgramVersion "--version" $ last . words . head . lines
+
+cmakeProgram :: Program
+cmakeProgram =
+  (simpleProgram "cmake") {programFindVersion = endOfFirstLineVersion}
+
+makeProgram :: Program
+makeProgram =
+  (simpleProgram $
+   case buildOS of
+     Windows -> "mingw32-make"
+     _ -> "make")
+  {programFindVersion = endOfFirstLineVersion}
+
+ninjaProgram :: Program
+ninjaProgram =
+  (simpleProgram "ninja")
+  {programFindVersion = findProgramVersion "--version" id}
