diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog for shake-language-c
 
+## v0.12.0
+
+* Support GHC 8.4.1
+
 ## v0.11.0
 
 * Support shake 0.16
diff --git a/shake-language-c.cabal b/shake-language-c.cabal
--- a/shake-language-c.cabal
+++ b/shake-language-c.cabal
@@ -13,7 +13,7 @@
 -- limitations under the License.
 
 Name:         shake-language-c
-Version:      0.11.0
+Version:      0.12.0
 Synopsis:     Utilities for cross-compiling with Shake
 Description:  This library provides <http://hackage.haskell.org/package/shake Shake> utilities for cross-compiling @C@, @C++@ and @ObjC@ code for various target platforms. Currently supported target platforms are Android, iOS, Linux, MacOS X, Windows\/MinGW and Google Portable Native Client (PNaCl). Supported host platforms are MacOS X, Linux and Windows.
 Category:     Development
@@ -64,6 +64,8 @@
     , shake >= 0.16
     , split
     , unordered-containers
+  if impl(ghc < 8.0)
+    Build-Depends: semigroups >= 0.18
 
 test-suite doctests
   type:           exitcode-stdio-1.0
diff --git a/src/Development/Shake/Language/C/BuildFlags.hs b/src/Development/Shake/Language/C/BuildFlags.hs
--- a/src/Development/Shake/Language/C/BuildFlags.hs
+++ b/src/Development/Shake/Language/C/BuildFlags.hs
@@ -57,6 +57,7 @@
 import           Data.List
 import           Data.List.Split
 import           Data.Maybe
+import           Data.Semigroup
 import           Development.Shake.Language.C.Language (Language(..))
 import           Development.Shake.Language.C.Label
 import           Development.Shake.Language.C.Util
@@ -142,9 +143,8 @@
 instance Default BuildFlags where
   def = defaultBuildFlags
 
-instance Monoid BuildFlags where
-  mempty = defaultBuildFlags
-  a `mappend` b =
+instance Semigroup BuildFlags where
+  a <> b =
       append systemIncludes    (get systemIncludes a)
     . append userIncludes      (get userIncludes a)
     . append defines           (get defines a)
@@ -156,6 +156,10 @@
     . append localLibraries    (get localLibraries a)
     . append archiverFlags     (get archiverFlags a)
     $ b
+
+instance Monoid BuildFlags where
+  mempty = defaultBuildFlags
+  mappend = (<>)
 
 -- | Construct preprocessor flags from the 'defines' field of 'BuildFlags'.
 defineFlags :: BuildFlags -> [String]
