diff --git a/CMake/generate.py b/CMake/generate.py
index e2186287fee8d7bd79548108ac75808f83fd5e4c..23ed8f1cd99f9c37bb144a04ec55dddf1abaa54b 100755
--- a/CMake/generate.py
+++ b/CMake/generate.py
@@ -170,13 +170,19 @@ class Project:
     def generate(self, dry_run):
         return Generator().generate(self, dry_run)
 
-    def recursive_dependencies(self):
+    def recursive_dependencies(self, no_test_dependencies):
         visited = {self.name}
         stack = [self.name]
 
         while len(stack) > 0:
             c = stack.pop()
-            for dep in PROJECTS[c].dependencies + PROJECTS[c].dependencies_test:
+
+            deps = PROJECTS[c].dependencies
+
+            if no_test_dependencies is False:
+                deps += PROJECTS[c].dependencies_test
+
+            for dep in deps:
                 if dep not in visited:
                     visited.add(dep)
                     stack.append(dep)
@@ -233,7 +239,7 @@ class Generator:
                 project_name=project.name,
                 target_libs=Helpers.join(project.dependencies + sys_libs, ' '),
                 include_paths=Helpers.join([project.name] + sys_includes, ' '),
-                cmake_options=project.cmake_additional_set,
+                cmake_options=Helpers.join(["set({} {})".format(k.upper(), v) for k, v in project.cmake_additional_set], sep='\n'),
                 source_files=Helpers.join(project.find_sources()),
                 find_packages=Helpers.join(map(lambda p: "find_package({})".format(p), finds), "\n"),
             ))
@@ -288,7 +294,7 @@ CATEGORIES = {
 
 # ----------------------------------------------------------------------------------------------------------------------
 
-def compute_packages(packages, groups, no_dependencies, verbose):
+def compute_packages(packages, groups, no_dependencies, no_test_dependencies, verbose):
     # filter out invalid
     for g in groups:
         if g not in GROUPS:
@@ -306,7 +312,7 @@ def compute_packages(packages, groups, no_dependencies, verbose):
 
     # no packages specified, i.e. return all
     if len(packages) is 0:
-        return PROJECTS.values()
+        packages = PROJECTS.values()
 
     # possibly compute dependencies
     for p in packages:
@@ -314,15 +320,19 @@ def compute_packages(packages, groups, no_dependencies, verbose):
             p_dependencies_str = map(lambda s: "'{}'".format(s), p.dependencies)
             print("Project '{}' depends on: {}".format(p, Helpers.join(p_dependencies_str, ', ')), file=sys.stderr)
 
+            if no_test_dependencies is False:
+                p_dependencies_test_str = map(lambda s: "'{}'".format(s), p.dependencies_test)
+                print("Project '{}' tests depends on: {}".format(p, Helpers.join(p_dependencies_test_str, ', ')), file=sys.stderr)
+
         if no_dependencies:
             res.add(p)
         else:
-            res |= {PROJECTS[d] for d in p.recursive_dependencies()}
+            res |= {PROJECTS[d] for d in p.recursive_dependencies(no_test_dependencies)}
     return res
 
 
-def main(dry_run, main_file, packages_requested, groups_requested, no_dependencies, only_show_dependencies):
-    packages = compute_packages(packages_requested, groups_requested, no_dependencies, only_show_dependencies)
+def main(dry_run, main_file, packages_requested, groups_requested, no_dependencies, no_test_dependencies, only_show_dependencies):
+    packages = compute_packages(packages_requested, groups_requested, no_dependencies, no_test_dependencies, only_show_dependencies)
 
     print("The following packages will be generated:", file=sys.stderr)
     print(", ".join(sorted([p.name for p in packages])), file=sys.stderr)
@@ -358,6 +368,7 @@ if __name__ == '__main__':
     parser.add_argument('-p', '--package', action='append', help='Specify packages to build. For multiple packages, use -p multiple times. Can be combined with -g')
     parser.add_argument('-g', '--group', action='append', help='Specify package group to build. For multiple groups, use -g multiple times. Can be combined with -p')
     parser.add_argument('--no-deps', action='store_true', default=False, help="Don't generate dependencies")
+    parser.add_argument('--no-test-deps', action='store_true', default=False, help="Don't consider test dependencies as dependencies")
     parser.add_argument('--show-deps', action='store_true', default=False, help='Only show dependencies of selected packages or groups')
     parser.add_argument('-v', '--version', action='store_true', default=False, help="Show current version")
 
@@ -374,4 +385,5 @@ if __name__ == '__main__':
                   args.package if args.package else [],
                   args.group if args.group else [],
                   args.no_deps,
+                  args.no_test_deps,
                   args.show_deps))