diff --git a/debian-build.cabal b/debian-build.cabal
--- a/debian-build.cabal
+++ b/debian-build.cabal
@@ -1,5 +1,5 @@
 name:                debian-build
-version:             0.7.0.0
+version:             0.7.1.0
 synopsis:            Debian package build sequence tools
 description:         This package provides build sequence functions
                      for debian package, and includes on-the-fly
diff --git a/mains/odebuild.hs b/mains/odebuild.hs
--- a/mains/odebuild.hs
+++ b/mains/odebuild.hs
@@ -1,6 +1,9 @@
-import System.Environment (getProgName, getArgs)
+import Control.Arrow ((>>>))
 import Control.Monad (void, when)
-import Data.List (stripPrefix)
+import System.Environment (getProgName, getArgs)
+import System.Console.GetOpt
+  (OptDescr (Option), ArgDescr (ReqArg, NoArg), ArgOrder (RequireOrder),
+   usageInfo, getOpt)
 
 import Debian.Package.Data (Source, Hackage, isBinaryPackage)
 import qualified Debian.Package.Build.Command as Command
@@ -10,11 +13,8 @@
    removeBuildDir, findDebianChanges, genSources, removeGhcLibrary)
 
 
-defualtModes :: [BuildMode]
-defualtModes =  [Dep, Indep, Src]
-
 remove' :: Hackage -> Build ()
-remove' hkg = liftTrace $ sequence_ [removeGhcLibrary m hkg | m <- defualtModes]
+remove' hkg = liftTrace $ sequence_ [removeGhcLibrary m hkg | m <- [Dep, Indep, Src]]
 
 install' :: Build ()
 install' =  do
@@ -25,42 +25,79 @@
     mapM_ (\c -> debi' [c]) cs
 
 
+data ODebuildOptions =
+  ODebuildOptions
+  { revision    :: Maybe String
+  , installDeps :: Bool
+  } deriving Show
+
+defaultOptions :: ODebuildOptions
+defaultOptions =
+  ODebuildOptions
+  { revision     =  Nothing
+  , installDeps  =  False
+  }
+
+descs :: [OptDescr (ODebuildOptions -> ODebuildOptions)]
+descs =
+  [ Option [] ["revision"]
+    (ReqArg (\s opts -> opts { revision = Just s }) "DEBIAN_REVISION")
+    "debian package revision to pass to cabal-debian"
+  , Option [] ["install-deps"]
+    (NoArg $ \opts -> opts { installDeps = True })
+    "install build depends when to run build"
+  ]
+
+parseOption :: [String]
+            -> (ODebuildOptions -> ODebuildOptions, ([String], [String]))
+parseOption args = (foldr (>>>) id ufs, (ss1, ss2))  where
+  (ufs, ss1, ss2) = getOpt RequireOrder descs args
+
 help :: IO ()
 help =  do
   prog <- getProgName
-  let rev  = "[--revision=<debian revision>]"
-      opts = "[debuild options]"
-  putStr . unlines $ map unwords
-    [[prog, "clean"],
-     [prog, "source", rev],
-     [prog, "build", rev, opts],
-     [prog, "install", rev, opts],
-     [prog, "reinstall", rev, opts],
-     ["-- reinstall (Remove and install) support only for Haskell"],
-     ["-- Revision string may use on auto-generating debian directory."]]
+  let opts  = "[options]"
+      debOpts = "[-- [debuild options]]"
+      msg = unlines $ map unwords
+            [ [prog, "clean"]
+            , [prog, "prepare", opts]
+            , [prog, "source", opts, debOpts]
+            , [prog, "build", opts, debOpts]
+            , [prog, "install", opts, debOpts]
+            , [prog, "reinstall", opts, debOpts]
+            , ["  reinstall (Remove and install) support only for Haskell"]
+            , ["  Revision string may use on auto-generating debian directory."]
+            ]
+  putStr $ usageInfo msg descs
 
 clean :: Build ()
 clean =  removeBuildDir
 
-source :: Maybe String -> Build ((FilePath, FilePath), Source, Maybe Hackage)
-source mayRev = do
+prepare :: ODebuildOptions -> Build ((FilePath, FilePath), Source, Maybe Hackage)
+prepare opts = do
   clean
-  maybe (fail "Illegal state: genSources") return =<< genSources mayRev
+  maybe (fail "Illegal state: genSources") return =<< genSources (revision opts)
 
-build :: Maybe String -> [String] -> Build (Source, Maybe Hackage)
-build mayRev opts = do
-  ((_, dir), src, mayH) <- source mayRev
-  liftTrace $ Command.build dir [] opts
+build' :: [BuildMode] -> ODebuildOptions -> [String] -> Build (Source, Maybe Hackage)
+build' modes opts args = do
+  ((_, dir), src, mayH) <- prepare opts
+  liftTrace $ Command.build dir modes (installDeps opts) args
   return (src, mayH)
 
-install :: Maybe String -> [String] -> Build ()
-install mayRev args = do
-  void $ build mayRev args
+source :: ODebuildOptions -> [String] -> Build (Source, Maybe Hackage)
+source = build' [Src]
+
+build :: ODebuildOptions -> [String] -> Build (Source, Maybe Hackage)
+build =  build' []
+
+install :: ODebuildOptions -> [String] -> Build ()
+install opts args = do
+  void $ build opts args
   install'
 
-reinstall :: Maybe String -> [String] -> Build ()
-reinstall mayRev args = do
-  (_src, mayH) <- build mayRev args
+reinstall :: ODebuildOptions -> [String] -> Build ()
+reinstall opts args = do
+  (_src, mayH) <- build opts args
   maybe (return ()) remove' mayH
   install'
 
@@ -69,13 +106,20 @@
   cur <- pwd
   uncurry (runBuild b cur) defaultConfig
 
-parseArgs :: [String] -> (Maybe String, [String])
-parseArgs =  d where
-  d aas@(a:as) = case stripPrefix "--revision=" a of
-    r@(Just _)  ->  (r, as)
-    Nothing     ->  (Nothing, aas)
-  d []         =    (Nothing, [])
+parseArgs :: [String] -> IO (ODebuildOptions, [String])
+parseArgs args0
+  | not $ null errs  = fail $ concat errs
+  | not $ null args1 = fail $ "Unknown arguments: " ++ unwords args1
+  | otherwise        = return
+                       (f defaultOptions, drop 1 rest )  where
+  (opt, rest) = break (== "--") args0
+  (f, (args1, errs)) = parseOption opt
 
+runArgs :: (ODebuildOptions -> [String] -> Build a) -> [String] -> IO a
+runArgs act as = do
+  (opts, args) <- parseArgs as
+  run $ act opts args
+
 main :: IO ()
 main =  do
   as0 <- getArgs
@@ -84,13 +128,13 @@
     "--help" : _          ->  help
     "help"   : _          ->  help
     as2@(c : as1)  ->  do
-      let (mayRev, args) = parseArgs as1
-      run $ case c of
-        "clean"         ->    clean
-        "source"        ->    void $ source mayRev
-        "build"         ->    void $ build mayRev args
-        "install"       ->    install mayRev args
-        "reinstall"     ->    reinstall mayRev args
-        _               ->    void . uncurry build $ parseArgs as2
+      case c of
+        "clean"         ->    run clean
+        "prepare"       ->    void $ runArgs (const . prepare) as1
+        "source"        ->    void $ runArgs source as1
+        "build"         ->    void $ runArgs build as1
+        "install"       ->    runArgs install as1
+        "reinstall"     ->    runArgs reinstall as1
+        _               ->    void $ runArgs build as2
 
-    []                  -> run . void $ build Nothing []
+    []                  -> run . void $ build defaultOptions []
diff --git a/src/Debian/Package/Build/Command.hs b/src/Debian/Package/Build/Command.hs
--- a/src/Debian/Package/Build/Command.hs
+++ b/src/Debian/Package/Build/Command.hs
@@ -241,20 +241,20 @@
 
 -- | Build package with specified mode list.
 --   Calculated mode list from control is used when not specified build modes.
-build :: FilePath -> [BuildMode] -> [String] -> Trace ()
-build dir modes' opts = do
+build :: FilePath -> [BuildMode] -> Bool -> [String] -> Trace ()
+build dir modes' installDep opts = do
   modes <-
     if null modes'
     then modeListFromControl <$> dpkgParseControl (dir </> "debian" </> "control")
     else return modes'
-  when (any hasBinaryBuildMode modes) $ aptGetBuildDepends dir
+  when (installDep && any hasBinaryBuildMode modes) $ aptGetBuildDepends dir
   sequence_ [buildPackage dir m opts | m <- modes]
 
 -- | Clean and build package using /debuild/ under specified directory
 rebuild :: FilePath -> [BuildMode] -> [String] -> Trace ()
 rebuild dir modes opts = do
   debuild dir ["clean"]
-  build dir modes opts
+  build dir modes False opts
 
 -- | Remove ghc library packages under specified source package directory
 removeGhcLibrary :: BuildMode -> Hackage -> Trace ()
