diff --git a/hoppy-runtime.cabal b/hoppy-runtime.cabal
--- a/hoppy-runtime.cabal
+++ b/hoppy-runtime.cabal
@@ -1,5 +1,5 @@
 name: hoppy-runtime
-version: 0.4.0
+version: 0.5.0
 synopsis: C++ FFI generator - Runtime support
 homepage: http://khumba.net/projects/hoppy
 license: Apache-2.0
diff --git a/src/Foreign/Hoppy/Setup.hs b/src/Foreign/Hoppy/Setup.hs
--- a/src/Foreign/Hoppy/Setup.hs
+++ b/src/Foreign/Hoppy/Setup.hs
@@ -38,10 +38,10 @@
 -- main =
 --   cppMain $
 --   ProjectConfig
---   { generatorExecutableName = "foobar-generator"
---   , cppPackageName = "foobar-cpp"
---   , cppSourcesDir = "cpp"
---   , hsSourcesDir = "src"
+--   { generatorExecutableName = \"foobar-generator\"
+--   , cppPackageName = \"foobar-cpp\"
+--   , cppSourcesDir = \"cpp\"
+--   , hsSourcesDir = \"src\"
 --   }
 -- @
 --
@@ -78,6 +78,7 @@
 import Distribution.Simple.LocalBuildInfo (
   LocalBuildInfo,
   absoluteInstallDirs,
+  buildDir,
   installedPkgs,
   libdir,
   withPrograms,
@@ -101,6 +102,7 @@
   )
 import Distribution.Simple.Setup (
   CopyDest (CopyTo, NoCopyDest),
+  RegisterFlags,
   buildVerbosity,
   cleanVerbosity,
   configVerbosity,
@@ -110,6 +112,8 @@
   fromFlagOrDefault,
   installDistPref,
   installVerbosity,
+  regInPlace,
+  regVerbosity,
   )
 import Distribution.Simple.UserHooks (
   UserHooks (
@@ -118,11 +122,13 @@
     cleanHook,
     copyHook,
     instHook,
+    regHook,
     postConf,
     preBuild,
     preCopy,
     preInst,
     preReg,
+    preRepl,
     preTest
     ),
   )
@@ -206,6 +212,11 @@
                  flagToMaybe $ installDistPref flags
       cppInstall verbosity pkgDesc localBuildInfo dest
 
+  , regHook = \pkgDesc localBuildInfo hooks flags -> do
+      regHook simpleUserHooks pkgDesc localBuildInfo hooks flags
+      let verbosity = fromFlagOrDefault normal $ regVerbosity flags
+      cppRegister verbosity pkgDesc localBuildInfo flags
+
   , cleanHook = \pkgDesc z hooks flags -> do
       cleanHook simpleUserHooks pkgDesc z hooks flags
       let verbosity = fromFlagOrDefault normal $ cleanVerbosity flags
@@ -266,6 +277,22 @@
   createDirectoryIfMissing True libDir
   runDbProgram verbosity makeProgram programDb ["install", "libdir=" ++ libDir]
 
+cppRegister :: Verbosity -> PackageDescription -> LocalBuildInfo -> RegisterFlags -> IO ()
+cppRegister verbosity _pkgDesc localBuildInfo flags = do
+  hasMakefile <- doesFileExist "Makefile"
+  unless hasMakefile $
+#if MIN_VERSION_Cabal(2,0,0)
+    die' verbosity
+#else
+    die
+#endif
+    "No Makefile found."
+  when (fromFlagOrDefault False (regInPlace flags)) $ do
+    let programDb = withPrograms localBuildInfo
+        libDir = buildDir localBuildInfo
+    createDirectoryIfMissing True libDir
+    runDbProgram verbosity makeProgram programDb ["install", "libdir=" ++ libDir]
+
 cppClean :: ProjectConfig -> Verbosity -> IO ()
 cppClean project verbosity = do
   removeGeneratedFiles Cpp project verbosity
@@ -334,6 +361,7 @@
   , preCopy = \_ _ -> addLibDir  -- Not sure if necessary, but doesn't hurt.
   , preInst = \_ _ -> addLibDir  -- Not sure if necessary, but doesn't hurt.
   , preReg = \_ _ -> addLibDir  -- Necessary.
+  , preRepl = \_ _ -> addLibDir -- Necessary.
 
   , cleanHook = \pkgDesc z hooks flags -> do
       cleanHook simpleUserHooks pkgDesc z hooks flags
