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.6.0.0
+version:             0.7.0.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,12 +1,12 @@
 import System.Environment (getProgName, getArgs)
-import System.FilePath ((</>))
 import Control.Monad (void, when)
 import Data.List (stripPrefix)
 
 import Debian.Package.Data (Source, Hackage, isBinaryPackage)
+import qualified Debian.Package.Build.Command as Command
 import Debian.Package.Build
-  (BuildMode (Dep, Indep, Src), buildPackage, debi', pwd,
-   defaultConfig, Build, runBuild, liftTrace, dpkgParseControl, modeListFromControl,
+  (BuildMode (Dep, Indep, Src), debi', pwd,
+   defaultConfig, Build, runBuild, liftTrace,
    removeBuildDir, findDebianChanges, genSources, removeGhcLibrary)
 
 
@@ -50,8 +50,7 @@
 build :: Maybe String -> [String] -> Build (Source, Maybe Hackage)
 build mayRev opts = do
   ((_, dir), src, mayH) <- source mayRev
-  ctrl <- liftTrace . dpkgParseControl $ dir </> "debian" </> "control"
-  liftTrace $ sequence_ [buildPackage dir m opts | m <- modeListFromControl ctrl]
+  liftTrace $ Command.build dir [] opts
   return (src, mayH)
 
 install :: Maybe String -> [String] -> Build ()
diff --git a/src/Debian/Package/Build.hs b/src/Debian/Package/Build.hs
--- a/src/Debian/Package/Build.hs
+++ b/src/Debian/Package/Build.hs
@@ -17,5 +17,5 @@
 
 import Debian.Package.Build.Monad
 import Debian.Package.Build.Command
-import Debian.Package.Build.Cabal hiding (hackageLongName, hackageName, hackageVersion)
+import Debian.Package.Build.Cabal hiding (hackageLongName, hackageName, hackageVersion, build)
 import Debian.Package.Build.Sequence
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
@@ -20,11 +20,11 @@
        , cabalDebian', cabalDebian, packageVersion
        , dpkgParseChangeLog, dpkgParseControl
 
-       , debuild, debi', debi
+       , debuild, debi', debi, aptGetBuildDepends
 
        , BuildMode (..)
 
-       , modeListFromControl, buildPackage, rebuild
+       , modeListFromControl, buildPackage, build, rebuild
 
        , removeGhcLibrary
 
@@ -36,9 +36,9 @@
 import Data.Maybe (fromMaybe)
 import Control.Arrow ((&&&))
 import Control.Applicative ((<$>))
-import Control.Monad (unless)
+import Control.Monad (when, unless)
 import Control.Monad.Trans.Class (lift)
-import System.FilePath ((<.>), takeDirectory)
+import System.FilePath ((</>), (<.>), takeDirectory)
 import qualified System.Directory as D
 import qualified System.Process as Process
 import System.Exit (ExitCode (..))
@@ -210,6 +210,11 @@
 debi :: FilePath -> [String] -> Trace ()
 debi dir = withCurrentDir' dir . debi'
 
+-- | Install build-depends
+aptGetBuildDepends :: FilePath -> Trace ()
+aptGetBuildDepends dir =
+  withCurrentDir' dir $ rawSystem' ["sudo", "apt-get-build-depends"]
+
 -- | Build mode, all or binary only
 data BuildMode = All | Bin | Src | Dep | Indep
                deriving (Eq, Show)
@@ -221,6 +226,9 @@
   :  [ Dep   | not . null $ controlArch c ]
   ++ [ Indep | not . null $ controlAll  c ]
 
+hasBinaryBuildMode :: BuildMode -> Bool
+hasBinaryBuildMode =  not . (== Src)
+
 -- | Build package using /debuild/ under specified directory
 buildPackage :: FilePath -> BuildMode -> [String] -> Trace ()
 buildPackage dir mode opts = do
@@ -231,11 +239,22 @@
       modeOpt Indep  =  ["-A"]
   debuild dir $ ["-uc", "-us"] ++ modeOpt mode ++ opts
 
+-- | 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
+  modes <-
+    if null modes'
+    then modeListFromControl <$> dpkgParseControl (dir </> "debian" </> "control")
+    else return modes'
+  when (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"]
-  sequence_ [ buildPackage dir mode opts | mode <- modes ]
+  build dir modes opts
 
 -- | Remove ghc library packages under specified source package directory
 removeGhcLibrary :: BuildMode -> Hackage -> Trace ()
