diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py
index 12af8f358f145c23ea28be397e53cd1b45d80f84..ded51a4d8f65aac6e3f6e5191796def1e47cecac 100644
--- a/pyopencl/__init__.py
+++ b/pyopencl/__init__.py
@@ -390,7 +390,17 @@ class Program(object):
     @classmethod
     def _process_build_options(cls, context, options):
         if isinstance(options, six.string_types):
-            options = [options]
+            import shlex
+            if six.PY2:
+                # shlex.split takes bytes (py2 str) on py2
+                if isinstance(options, six.text_type):
+                    options = options.encode("utf-8")
+            else:
+                # shlex.split takes unicode (py3 str) on py3
+                if isinstance(options, six.binary_type):
+                    options = options.decode("utf-8")
+
+            options = shlex.split(options)
 
         def encode_if_necessary(s):
             if isinstance(s, six.text_type):