diff --git a/CMake/config.ini b/CMake/config.ini
deleted file mode 100644
index 6b8539753958018b88b926b22cff7c69329eb0a3..0000000000000000000000000000000000000000
--- a/CMake/config.ini
+++ /dev/null
@@ -1,68 +0,0 @@
-[Versioning]
-major = 0
-minor = 0
-patch = 1
-
-
-[CMake:Templates]
-root = CMakeLists_root.txt
-lib  = CMakeLists_lib.txt
-bin  = CMakeLists_bin.txt
-
-[CMake:Sources]
-ExcludeSources: .txx, .cxx, .hxx
-SourcesDir: src
-TestSourcesDir: test-src
-
-[ModulesLib]
-alib2algo
-alib2algo_experimental
-alib2aux
-alib2cli
-alib2common
-alib2data
-alib2data_experimental
-alib2elgo
-alib2measure
-alib2raw
-alib2raw_cli_integration
-alib2std
-alib2str
-alib2str_cli_integration
-alib2xml
-alib2abstraction
-alib2dummy
-alib2graph_data
-alib2graph_algo
-alib2gui
-
-[ModulesBin]
-aaccess2
-aarbology2
-acast2
-acompaction2
-acompare2
-aconversions2
-aconvert2
-aderivation2
-adeterminize2
-aecho2
-aepsilon2
-agenerate2
-aintegral2
-aintrospection2
-alangop2
-aminimize2
-anormalize2
-aql2
-aquery2
-arand2
-araw2
-arename2
-areverse2
-arun2
-astat2
-astringology2
-atrim2
-tniceprint
-agui2
diff --git a/CMake/generate.conf b/CMake/generate.conf
new file mode 100644
index 0000000000000000000000000000000000000000..87b3e601211a6ad0abc2f8c825a30b04abb15e33
--- /dev/null
+++ b/CMake/generate.conf
@@ -0,0 +1,53 @@
+[Versioning]
+; Promote version with release
+major = 0
+minor = 0
+patch = 1
+
+[General]
+ProjectConfFile: project.conf
+PathToSources: ..
+
+[CMake:Categories]
+; projects and their templates
+; project must belong in one of these categories
+root:       CMakeLists_root.txt
+executable: CMakeLists_bin.txt
+library:    CMakeLists_lib.txt
+
+[CMake:Sources]
+; where to find sources, relative to {PROJECT_DIR}
+ExcludeSources: .txx .cxx .hxx
+SourcesDir: src
+TestSourcesDir: test-src
+
+; ----------------------------------------------------------
+; system dependencies:
+; if projects depends on one of these probably want to specify what should be passed inside target_* in cmake
+
+[CMake:Deps:xml2]
+include: PUBLIC ${LIBXML2_INCLUDE_DIR}
+link: ${LIBXML2_LIBRARIES}
+
+[CMake:Deps:threads]
+link: ${CMAKE_THREAD_LIBS_INIT}
+
+[CMake:Deps:Qt5Widgets]
+link: Qt5::Widgets
+include: ${Qt5Widgets_INCLUDE_DIRS}
+
+[CMake:Deps:Qt5Xml]
+link: Qt5::Xml
+include:${Qt5Xml_INCLUDE_DIRS}
+
+[CMake:Deps:graphviz]
+link: ${GRAPHVIZ_GVC_LIBRARY} ${GRAPHVIZ_CGRAPH_LIBRARY}
+include: ${GRAPHVIZ_INCLUDE_DIR}
+
+[CMake:Deps:json]
+link: ${JSONCPP_LIBRARIES}
+include: ${jsoncpp_INCLUDE_DIRS}
+
+[CMake:Deps:readline]
+link: ${Readline_LIBRARY}
+include: ${Readline_INCLUDE_DIR}
\ No newline at end of file
diff --git a/CMake/generate.py b/CMake/generate.py
index 0b933cc4b2ef0a0be6f0684aae8b6b8af579bdcb..3eb89d1cda6dc8a297555c71fb3919a66b0493fc 100755
--- a/CMake/generate.py
+++ b/CMake/generate.py
@@ -5,8 +5,8 @@ import sys
 import configparser
 import argparse
 
-# ----------------------------------------------------------------------------------------------------------------------
 
+# ----------------------------------------------------------------------------------------------------------------------
 
 class SmartOpen:
     SEPARATOR_SIZE = 20
@@ -15,11 +15,7 @@ class SmartOpen:
         self._dry_run = dry_run
         self._filename = filename
         self._mode = mode
-
-        if self._dry_run:
-            self._fd = sys.stdout
-        else:
-            self._fd = open(os.path.join(directory, filename), mode=mode, encoding=encoding)
+        self._fd = sys.stdout if self._dry_run else open(os.path.join(directory, filename), mode=mode, encoding=encoding)
 
     def read(self):
         return self._fd.read()
@@ -37,179 +33,252 @@ class SmartOpen:
         if self._fd != sys.stdout:
             self._fd.close()
 
+
 # ----------------------------------------------------------------------------------------------------------------------
 
+class Helpers:
+    @staticmethod
+    def join(lst, sep='\n        '):
+        return sep.join(lst)
+
+    @staticmethod
+    def path(*args):
+        return os.path.realpath(os.path.join(*args))
 
-SCRIPT_DIRECTORY = os.path.join(os.path.dirname(__file__))
-ALIB_DIRECTORY = os.path.join(SCRIPT_DIRECTORY, "..")
+    @staticmethod
+    def find_dirs_with_file(directory, filename):
+        return [e.name for e in os.scandir(directory) if e.is_dir() and os.path.isfile(Helpers.path(e.path, filename))]
 
-config = configparser.ConfigParser(allow_no_value=True)
-config.read(os.path.join(SCRIPT_DIRECTORY, 'config.ini'))
 
 # ----------------------------------------------------------------------------------------------------------------------
 
+class ConfigException(Exception):
+    pass
+
+
+class ConfigHelpers:
+    @staticmethod
+    def c_get(c, section, key, fallback=None):
+        try:
+            return c.get(section, key)
+        except (configparser.NoOptionError, configparser.NoSectionError):
+            if fallback is not None:
+                return fallback
+            raise ConfigException("[{}][{}] not defined".format(section, key))
+
+    @staticmethod
+    def c_get_array(c, section, key, fallback=None):
+        try:
+            return c.get(section, key).strip().split()
+        except (configparser.NoOptionError, configparser.NoSectionError):
+            if fallback is not None:
+                return fallback
+            raise ConfigException("[{}][{}] not defined".format(section, key))
+
+    @staticmethod
+    def c_section(c, section, fallback=None):
+        try:
+            return {k: v for k, v in c[section].items()}
+        except (configparser.NoSectionError, KeyError):
+            if fallback is not None:
+                return fallback
+            raise ConfigException("[{}] not defined".format(section))
 
-PACKAGES = {
-    'lib': {key for key in config['ModulesLib']},
-    'bin': {key for key in config['ModulesBin']},
-}
 
-TEMPLATES = {
-    tpl: SmartOpen(config['CMake:Templates'][tpl], directory=SCRIPT_DIRECTORY, mode='r').read() for tpl in ['root', 'lib', 'bin']
-}
+# ----------------------------------------------------------------------------------------------------------------------
 
+class ProjectException(Exception):
+    pass
 
-# ----------------------------------------------------------------------------------------------------------------------
 
+class Project:
+    def __init__(self, name, conf):
+        self.name = name
+        self.path = Helpers.path(ALIB_DIRECTORY, self.name)
+        self._config = configparser.ConfigParser(allow_no_value=True)
+        self._config.read(Helpers.path(self.path, conf))
 
-def to_rows(lst, sep='\n        '):
-    return sep.join(lst)
+    @property
+    def category(self):
+        ctg = ConfigHelpers.c_get(self._config, 'General', 'category')
+        if ctg not in CATEGORIES.keys():
+            raise ProjectException("Invalid category ({})".format(ctg))
+        return ctg
 
-# ----------------------------------------------------------------------------------------------------------------------
+    @property
+    def cmake_additional_set(self):
+        return ConfigHelpers.c_section(self._config, 'CMake', fallback={}).items()
+
+    @property
+    def dependencies(self):
+        return ConfigHelpers.c_get_array(self._config, 'Dependencies', 'project', fallback=[])
+
+    @property
+    def dependencies_test(self):
+        return ConfigHelpers.c_get_array(self._config, 'TestDependencies', 'project', fallback=[])
 
+    @property
+    def system_deps(self):
+        return ConfigHelpers.c_get_array(self._config, 'Dependencies', 'system', fallback=[])
 
-def get_source_files(project_name, directory):
-    # Recursively find all source file(s) and directories
-    source_files = []
-    relpath_ref = os.path.join(ALIB_DIRECTORY, project_name)
+    @property
+    def system_deps_test(self):
+        return ConfigHelpers.c_get_array(self._config, 'Dependencies', 'system', fallback=[])
 
-    exclude_sources = tuple(map(lambda s: s.strip(), config['CMake:Sources']['ExcludeSources'].split(',')))
+    def find_sources(self):
+        return self._find_sources(CONFIG['CMake:Sources']['SourcesDir'])
 
-    for dp, dn, fn in os.walk(os.path.join(relpath_ref, directory)):
-        source_files = source_files + [os.path.relpath(os.path.join(dp, file), relpath_ref)
-                                       for file in fn if not file.endswith(exclude_sources)]
+    def find_sources_test(self):
+        return self._find_sources(CONFIG['CMake:Sources']['TestSourcesDir'])
+
+    def _find_sources(self, directory, exclude_sources=None):
+        # Recursively find all source file(s) and directories, return their names relatively to alib/{project}/
+
+        if exclude_sources is None:
+            exclude_sources = tuple(map(lambda s: s.strip(), CONFIG['CMake:Sources']['ExcludeSources'].split(' ')))
+
+        source_files = []
+        for dp, dn, fn in os.walk(Helpers.path(self.path, directory)):
+            source_files = source_files + [os.path.relpath(Helpers.path(dp, file), self.path)
+                                           for file in fn if not file.endswith(exclude_sources)]
+        return source_files
+
+    def generate(self, dry_run):
+        return Generator().generate(self, dry_run)
+
+    def recursive_dependencies(self):
+        visited = {self.name}
+        stack = [self.name]
+
+        while len(stack) > 0:
+            c = stack.pop()
+            for dep in PROJECTS[c].dependencies:
+                if dep not in visited:
+                    visited.add(dep)
+                    stack.append(dep)
+        return visited
 
-    return source_files
 
 # ----------------------------------------------------------------------------------------------------------------------
 
+class Generator:
+    @classmethod
+    def generate(cls, project, dry_run):
+        foo = getattr(cls, 'generate_{}'.format(project.category))
+        return foo(project, dry_run)
+
+    @classmethod
+    def generate_root(cls, project, dry_run):
+        with SmartOpen("CMakeLists.txt", 'w', directory=ALIB_DIRECTORY, dry_run=dry_run) as f:
+            f.write(CATEGORIES['root'].format(
+                alib_modules_lib=Helpers.join([p.name for p in PROJECTS.values() if p.category == "library"]),
+                alib_modules_exe=Helpers.join([p.name for p in PROJECTS.values() if p.category == "executable"]),
+                alib_versioning_major=CONFIG['Versioning']['major'],
+                alib_versioning_minor=CONFIG['Versioning']['minor'],
+                alib_versioning_patch=CONFIG['Versioning']['patch'],
+            ))
+
+    @classmethod
+    def generate_library(cls, project, dry_run):
+        sys_includes, sys_libs = cls._handle_system_deps(project.system_deps)
+        test_sys_includes, test_sys_libs = cls._handle_system_deps(project.system_deps)
+
+        with SmartOpen("CMakeLists.txt", 'w', directory=project.path, dry_run=dry_run) as f:
+            f.write(CATEGORIES[project.category].format(
+                project_name=project.name,
+                target_libs=Helpers.join(project.dependencies + sys_libs, ' '),
+                target_test_libs=Helpers.join(project.dependencies_test + test_sys_libs, ' '),
+                include_paths=Helpers.join(sys_includes, ' '),
+                include_test_paths=Helpers.join(test_sys_includes, ' '),
+                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()),
+                source_files_test=Helpers.join(project.find_sources_test()),
+            ))
+
+    @classmethod
+    def generate_executable(cls, project, dry_run):
+        sys_includes, sys_libs = cls._handle_system_deps(project.system_deps)
+        test_sys_includes, test_sys_libs = cls._handle_system_deps(project.system_deps)
+
+        with SmartOpen("CMakeLists.txt", 'w', directory=project.path, dry_run=dry_run) as f:
+            f.write(CATEGORIES[project.category].format(
+                project_name=project.name,
+                target_libs=Helpers.join(project.dependencies + sys_libs, ' '),
+                target_test_libs=Helpers.join(project.dependencies_test + test_sys_libs, ' '),
+                include_paths=Helpers.join([project.name] + sys_includes, ' '),
+                include_test_paths=Helpers.join([project.name] + test_sys_includes, ' '),
+                cmake_options=project.cmake_additional_set,
+                source_files=Helpers.join(project.find_sources()),
+            ))
+
+    @staticmethod
+    def _handle_system_deps(system_deps):
+        libs, incl = [], []
+        for dep in system_deps:
+            incl = incl + ConfigHelpers.c_get_array(CONFIG, 'CMake:Deps:{}'.format(dep), 'include', fallback=[])
+            libs = libs + ConfigHelpers.c_get_array(CONFIG, 'CMake:Deps:{}'.format(dep), 'link', fallback=[])
+
+        return incl, libs
 
-def parse_makeconfig(file):
-    link_libs = []
-    link_test_libs = []
-    include_libs = []
-    include_test_libs = []
-    cmake_options = []
-
-    # Read and parse makefile.conf
-    with open(file, 'r') as file:
-        for line in file:
-            if line.startswith('LINK_LIBRARIES'):
-                link_libs = line[len('LINK_LIBRARIES='):].split()
-            elif line.startswith('SYSTEM_LIBRARIES'):
-                sys_libs = line[len('SYSTEM_LIBRARIES='):].split()
-                for lib in sys_libs:
-                    if lib == 'xml2':
-                        link_libs.append('${LIBXML2_LIBRARIES}')
-                        include_libs.append('PUBLIC ${LIBXML2_INCLUDE_DIR}')
-                    elif lib == 'threads':
-                        link_libs.append('${CMAKE_THREAD_LIBS_INIT}')
-                    elif lib == 'Qt5Widgets':
-                        link_libs.append('Qt5::Widgets')
-                        include_libs.append('${Qt5Widgets_INCLUDE_DIRS}')
-                    elif lib == 'Qt5Xml':
-                        link_libs.append('Qt5::Xml')
-                        include_libs.append('${Qt5Xml_INCLUDE_DIRS}')
-                    elif lib == 'graphviz':
-                        link_libs.append('${GRAPHVIZ_GVC_LIBRARY}')
-                        link_libs.append('${GRAPHVIZ_CGRAPH_LIBRARY}')
-                        include_libs.append('${GRAPHVIZ_INCLUDE_DIR}')
-                    elif lib == 'json':
-                        link_libs.append('${JSONCPP_LIBRARIES}')
-                        include_libs.append('${jsoncpp_INCLUDE_DIRS}')
-                    else:
-                        link_libs.append(lib)
-            elif line.startswith('TEST_LINK_LIBRARIES'):
-                link_test_libs = line[len('TEST_LINK_LIBRARIES='):].split()
-            elif line.startswith('TEST_SYSTEM_LIBRARIES'):
-                sys_libs = line[len('TEST_SYSTEM_LIBRARIES='):].split()
-                for lib in sys_libs:
-                    link_test_libs.append()
-            elif line.startswith('AUTOMOC=ON'):
-                cmake_options.append('set(CMAKE_AUTOMOC ON)')
-            elif line.startswith('AUTOUIC=ON'):
-                cmake_options.append('set(CMAKE_AUTOUIC ON)')
-
-    return ' '.join(link_libs), ' '.join(link_test_libs), ' '.join(include_libs), ' '.join(
-        include_test_libs), '\n'.join(cmake_options)
 
 # ----------------------------------------------------------------------------------------------------------------------
 
+SCRIPT_DIRECTORY = Helpers.path(os.path.dirname(__file__))
+CONFIG = configparser.ConfigParser(allow_no_value=True)
+CONFIG.read(Helpers.path(SCRIPT_DIRECTORY, 'generate.conf'))
+ALIB_DIRECTORY = Helpers.path(SCRIPT_DIRECTORY, CONFIG['General']['PathToSources'])
+PROJECTS = {
+    project: Project(project, CONFIG['General']['ProjectConfFile'])
+    for project in Helpers.find_dirs_with_file(ALIB_DIRECTORY, CONFIG['General']['ProjectConfFile'])
+}
+CATEGORIES = {
+    category: SmartOpen(template, directory=SCRIPT_DIRECTORY, mode='r').read()
+    for category, template in CONFIG['CMake:Categories'].items()
+}
 
-def create_root_cmakelist(dry_run, packages):
-    with SmartOpen("CMakeLists.txt", 'w', directory=ALIB_DIRECTORY, dry_run=dry_run) as f:
-        f.write(TEMPLATES['root'].format(
-            alib_modules_lib=to_rows(packages['library']),
-            alib_modules_exe=to_rows(packages['executable']),
-            alib_versioning_major=config['Versioning']['major'],
-            alib_versioning_minor=config['Versioning']['minor'],
-            alib_versioning_patch=config['Versioning']['patch'],
-        ))
-
-
-def create_library_package(project_name, dry_run):
-    link_libs, link_test_libs, include_libs, include_test_libs, cmake_options = parse_makeconfig(
-        os.path.join(ALIB_DIRECTORY, project_name, 'makefile.conf'))
-
-    with SmartOpen("CMakeLists.txt", 'w', directory=os.path.join(ALIB_DIRECTORY, project_name), dry_run=dry_run) as f:
-        f.write(TEMPLATES['lib'].format(
-            project_name=project_name,
-            target_libs=link_libs,
-            target_test_libs=link_test_libs,
-            include_paths=include_libs,
-            include_test_paths=include_test_libs,
-            cmake_options=cmake_options,
-            source_files=to_rows(get_source_files(project_name, config['CMake:Sources']['SourcesDir'])),
-            source_files_test=to_rows(get_source_files(project_name, config['CMake:Sources']['TestSourcesDir'])),
-        ))
-
-
-def create_executable_package(project_name, dry_run):
-    link_libs, link_test_libs, include_libs, include_test_libs, cmake_options = parse_makeconfig(
-        os.path.join(ALIB_DIRECTORY, project_name, 'makefile.conf'))
-
-    with SmartOpen("CMakeLists.txt", 'w', directory=os.path.join(ALIB_DIRECTORY, project_name), dry_run=dry_run) as f:
-        f.write(TEMPLATES['bin'].format(
-            project_name=project_name,
-            target_libs=link_libs,
-            target_test_libs=link_test_libs,
-            include_paths=include_libs,
-            include_test_paths=include_test_libs,
-            cmake_options=cmake_options,
-            source_files=to_rows(get_source_files(project_name, config['CMake:Sources']['SourcesDir'])),
-        ))
 
 # ----------------------------------------------------------------------------------------------------------------------
 
 
-def main(dry_run, main_file, packages):
-    packages = {
-        'library': set(packages) & PACKAGES['lib'],
-        'executable': set(packages) & PACKAGES['bin'],
-    }
+def main(dry_run, main_file, packages_requested, no_dependencies):
+    if packages_requested is None:
+        packages = PROJECTS.values()
+    else:
+        # Filter out invalid packages and possibly compute dependencies
+        packages = set()
+        for p in packages_requested:
+            if p not in PROJECTS:
+                print("Warning: Package {} is not a valid project. Skipping".format(p), file=sys.stderr)
+                continue
+
+            if no_dependencies:
+                packages.add(p)
+            else:
+                for dep in PROJECTS[p].recursive_dependencies():
+                    packages.add(dep)
 
-    packages_functions = {
-        'library':    create_library_package,
-        'executable': create_executable_package,
-    }
+        packages = [PROJECTS[p] for p in set(packages)]
 
-    packages_cnt = sum([len(v) for k, v in packages.items()]) + (main_file is True)
+    print("The following packages will be generated:", file=sys.stderr)
+    print(", ".join(sorted([p.name for p in packages])), file=sys.stderr)
 
-    i = 1
-    for type, packages_set in packages.items():
-        for package in packages_set:
-            try:
-                packages_functions[type](package, dry_run)
-                print('[{}/{}] Generated {} package {}'.format(i, packages_cnt, type, package), file=sys.stderr)
-            except FileNotFoundError as e:
-                print('[{}/{}] Skipping library package {}: {}'.format(i, packages_cnt, type, package, e), file=sys.stderr)
+    packages_cnt = len(packages) + (main_file is True)
 
-            i += 1
+    # Generate packages
+    for i, p in enumerate(packages, 1):
+        try:
+            p.generate(dry_run)
+            print('[{}/{}] Generated {} package {}'.format(i, packages_cnt, p.category, p.name), file=sys.stderr)
+        except ProjectException as e:
+            print('[{}/{}] Error while generating {}: {}'.format(i, packages_cnt, p.name, e), file=sys.stderr)
+            return 1
 
     # Generate root file
     if main_file:
-        create_root_cmakelist(dry_run, packages)
-        print('[{}/{}] Generated main CMakeLists.txt'.format(i, packages_cnt), file=sys.stderr)
+        Generator.generate_root(None, dry_run)
+        print('[{}/{}] Generated main CMakeLists.txt'.format(packages_cnt, packages_cnt), file=sys.stderr)
+
+    return 0
 
 # ----------------------------------------------------------------------------------------------------------------------
 
@@ -219,10 +288,7 @@ if __name__ == '__main__':
     parser.add_argument('-w', '--write', action='store_true', default=False, help="Write files")
     parser.add_argument('-m', '--main', action='store_true', default=False, help="Generate main CMakeLists.txt")
     parser.add_argument('-p', '--packages', action='append', help='Specify packages to build. For multiple packages, use -p multiple times')
+    parser.add_argument('--no-deps', action='store_true', default=False, help="Don't generate dependencies")
 
     args = parser.parse_args()
-
-    if args.packages is None:
-        args.packages = list(PACKAGES['lib'] | PACKAGES['bin'])
-
-    main(not args.write, args.main, args.packages)
+    sys.exit(main(not args.write, args.main, args.packages, args.no_deps))
diff --git a/aaccess2/makefile.conf b/aaccess2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aaccess2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aaccess2/project.conf b/aaccess2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aaccess2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aarbology2/makefile.conf b/aarbology2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aarbology2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aarbology2/project.conf b/aarbology2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aarbology2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/acast2/makefile.conf b/acast2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/acast2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/acast2/project.conf b/acast2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/acast2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/acompaction2/makefile.conf b/acompaction2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/acompaction2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/acompaction2/project.conf b/acompaction2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/acompaction2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/acompare2/makefile.conf b/acompare2/makefile.conf
deleted file mode 100644
index 9e07c416d0b7996c43dd7c41c97fa4eede9b3815..0000000000000000000000000000000000000000
--- a/acompare2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2aux alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/acompare2/project.conf b/acompare2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..327dad50c0b5036661a51c94f1513394a0b007fa
--- /dev/null
+++ b/acompare2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2aux alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aconversions2/makefile.conf b/aconversions2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aconversions2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aconversions2/project.conf b/aconversions2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aconversions2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aconvert2/makefile.conf b/aconvert2/makefile.conf
deleted file mode 100644
index 9e07c416d0b7996c43dd7c41c97fa4eede9b3815..0000000000000000000000000000000000000000
--- a/aconvert2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2aux alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aconvert2/project.conf b/aconvert2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..327dad50c0b5036661a51c94f1513394a0b007fa
--- /dev/null
+++ b/aconvert2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2aux alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aderivation2/makefile.conf b/aderivation2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aderivation2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aderivation2/project.conf b/aderivation2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aderivation2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/adeterminize2/makefile.conf b/adeterminize2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/adeterminize2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/adeterminize2/project.conf b/adeterminize2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/adeterminize2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aecho2/makefile.conf b/aecho2/makefile.conf
deleted file mode 100644
index f191b38d1b0bd0072cfae7a9c83c2daffa3f13a3..0000000000000000000000000000000000000000
--- a/aecho2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aecho2/project.conf b/aecho2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..9e68b5b47f2967167e4048edde60b0b3472978bc
--- /dev/null
+++ b/aecho2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aepsilon2/makefile.conf b/aepsilon2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aepsilon2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aepsilon2/project.conf b/aepsilon2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aepsilon2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/agenerate2/makefile.conf b/agenerate2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/agenerate2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/agenerate2/project.conf b/agenerate2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/agenerate2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/agui2/makefile.conf b/agui2/makefile.conf
deleted file mode 100644
index e6dbae80915ad19609b897b5382f18f058201e42..0000000000000000000000000000000000000000
--- a/agui2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2algo alib2aux alib2data alib2str alib2gui
-SYSTEM_LIBRARIES=
diff --git a/agui2/project.conf b/agui2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..9b9617c589ebe4e04a4d7b9211f8ca4991c8d840
--- /dev/null
+++ b/agui2/project.conf
@@ -0,0 +1,5 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2algo alib2aux alib2data alib2str alib2gui
diff --git a/aintegral2/makefile.conf b/aintegral2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aintegral2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aintegral2/project.conf b/aintegral2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aintegral2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aintrospection2/makefile.conf b/aintrospection2/makefile.conf
deleted file mode 100644
index 234871704f8d037ecbeeb8d48bb199be4a74c14c..0000000000000000000000000000000000000000
--- a/aintrospection2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo_experimental alib2algo alib2raw alib2str alib2data_experimental alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aintrospection2/project.conf b/aintrospection2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..9cb4c428be7d1a31e8b5bb2706989ac3f45763e1
--- /dev/null
+++ b/aintrospection2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo_experimental alib2algo alib2raw alib2str alib2data_experimental alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alangop2/makefile.conf b/alangop2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/alangop2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/alangop2/project.conf b/alangop2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/alangop2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2abstraction/makefile.conf b/alib2abstraction/makefile.conf
deleted file mode 100644
index ea2610b2e23814d6732be177575f78d30ff849e2..0000000000000000000000000000000000000000
--- a/alib2abstraction/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2std
-SYSTEM_LIBRARIES=
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2abstraction/project.conf b/alib2abstraction/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..78d30d7bf594e32b218bc68fb11bca42d78d4a74
--- /dev/null
+++ b/alib2abstraction/project.conf
@@ -0,0 +1,5 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2std
diff --git a/alib2algo/makefile.conf b/alib2algo/makefile.conf
deleted file mode 100644
index 58f8cf13df2ea0238f09dbb9739339e3701ac9d7..0000000000000000000000000000000000000000
--- a/alib2algo/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=alib2str
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2algo/project.conf b/alib2algo/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..cc5f3862491678354557113384f2e9757e052ed2
--- /dev/null
+++ b/alib2algo/project.conf
@@ -0,0 +1,9 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
+
+[TestDependencies]:
+project: alib2str
diff --git a/alib2algo_experimental/makefile.conf b/alib2algo_experimental/makefile.conf
deleted file mode 100644
index c41183047e07478ca8c17d856ec5b29d2aeffd19..0000000000000000000000000000000000000000
--- a/alib2algo_experimental/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2algo alib2data_experimental alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=alib2str
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2algo_experimental/project.conf b/alib2algo_experimental/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..8c47647f2c955491fd53fb38e8a300c3c59e2248
--- /dev/null
+++ b/alib2algo_experimental/project.conf
@@ -0,0 +1,9 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2algo alib2data_experimental alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
+
+[TestDependencies]
+project: alib2str
diff --git a/alib2aux/makefile.conf b/alib2aux/makefile.conf
deleted file mode 100644
index 898278fdb6d546c1bfc14a78266df8c1cc446c37..0000000000000000000000000000000000000000
--- a/alib2aux/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2aux/project.conf b/alib2aux/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..a6a87ce284ec164784b7098b2f2b0bcfd4a1e4e6
--- /dev/null
+++ b/alib2aux/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2cli/makefile.conf b/alib2cli/makefile.conf
deleted file mode 100644
index 83fd22cf4cd31f7fe0dd0fdedb36eabb31d07830..0000000000000000000000000000000000000000
--- a/alib2cli/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2 stdc++fs
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2cli/project.conf b/alib2cli/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..596faa3f5faeb5496654756c7e645c6a5dbc4462
--- /dev/null
+++ b/alib2cli/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2 stdc++fs
diff --git a/alib2common/makefile.conf b/alib2common/makefile.conf
deleted file mode 100644
index 91392cc68f13b5058017574754bc2c5616b017ad..0000000000000000000000000000000000000000
--- a/alib2common/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2common/project.conf b/alib2common/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..0aa4d97348706fc9eee3ec8ab09baa1c97a688f8
--- /dev/null
+++ b/alib2common/project.conf
@@ -0,0 +1,5 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2abstraction alib2measure alib2std
diff --git a/alib2data/makefile.conf b/alib2data/makefile.conf
deleted file mode 100644
index 2bd89df75bedde20598a905a3d2a23dcceee08c4..0000000000000000000000000000000000000000
--- a/alib2data/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2data/project.conf b/alib2data/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..407119daeb6780de87cb5566296b14adc69d6d63
--- /dev/null
+++ b/alib2data/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2data_experimental/makefile.conf b/alib2data_experimental/makefile.conf
deleted file mode 100644
index 915aeab509d5d7c859c84e59376ca1de15525315..0000000000000000000000000000000000000000
--- a/alib2data_experimental/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2data_experimental/project.conf b/alib2data_experimental/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..fe8a58059bc37f819147c888560f8e4f74d709ce
--- /dev/null
+++ b/alib2data_experimental/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2dummy/makefile.conf b/alib2dummy/makefile.conf
deleted file mode 100644
index 2bd89df75bedde20598a905a3d2a23dcceee08c4..0000000000000000000000000000000000000000
--- a/alib2dummy/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2dummy/project.conf b/alib2dummy/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..407119daeb6780de87cb5566296b14adc69d6d63
--- /dev/null
+++ b/alib2dummy/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2elgo/makefile.conf b/alib2elgo/makefile.conf
deleted file mode 100644
index 73783317e9bf02e0cdaaf3d949e7f363518525b0..0000000000000000000000000000000000000000
--- a/alib2elgo/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2algo alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=alib2str
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2elgo/project.conf b/alib2elgo/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5aa9d9cc6c0c512852c6fb301f972d3157940803
--- /dev/null
+++ b/alib2elgo/project.conf
@@ -0,0 +1,9 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2algo alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
+
+[TestDependencies]
+project: alib2str
diff --git a/alib2graph_algo/makefile.conf b/alib2graph_algo/makefile.conf
deleted file mode 100644
index e577fdac49a6f1a68355f08961c349ffcc9e2955..0000000000000000000000000000000000000000
--- a/alib2graph_algo/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2graph_data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2graph_algo/project.conf b/alib2graph_algo/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..bc0462bb7f9b1a0e0a79ebaef438eec34b982799
--- /dev/null
+++ b/alib2graph_algo/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2graph_data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2graph_data/makefile.conf b/alib2graph_data/makefile.conf
deleted file mode 100644
index 2bd89df75bedde20598a905a3d2a23dcceee08c4..0000000000000000000000000000000000000000
--- a/alib2graph_data/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2graph_data/project.conf b/alib2graph_data/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..407119daeb6780de87cb5566296b14adc69d6d63
--- /dev/null
+++ b/alib2graph_data/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2gui/makefile.conf b/alib2gui/makefile.conf
deleted file mode 100644
index dc40a8145f1bd3b98cb94b868ae6e20bf60e811e..0000000000000000000000000000000000000000
--- a/alib2gui/makefile.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-LINK_LIBRARIES=alib2str alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=threads xml2 Qt5Widgets Qt5Xml graphviz json
-TEST_LINK_LIBRARIES=alib2algo alib2aux
-TEST_SYSTEM_LIBRARIES=
-AUTOMOC=ON
-AUTOUIC=ON
diff --git a/alib2gui/project.conf b/alib2gui/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..54ccc707e336e99126a9ae149e54fc52c663b03f
--- /dev/null
+++ b/alib2gui/project.conf
@@ -0,0 +1,13 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2str alib2xml alib2common alib2abstraction alib2measure alib2std
+system: threads xml2 Qt5Widgets Qt5Xml graphviz json
+
+[TestDependencies]
+project: alib2algo alib2aux
+
+[CMake]
+CMAKE_AUTOMOC: ON
+CMAKE_AUTOUIC: ON
diff --git a/alib2measure/makefile.conf b/alib2measure/makefile.conf
deleted file mode 100644
index 81fee2807aa1104e4a94b570083599e5e670528a..0000000000000000000000000000000000000000
--- a/alib2measure/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=
-SYSTEM_LIBRARIES=
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2measure/project.conf b/alib2measure/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..7b83f384a63b7394d4da2eb4afc925cfcc619aa5
--- /dev/null
+++ b/alib2measure/project.conf
@@ -0,0 +1,2 @@
+[General]
+category: library
diff --git a/alib2raw/makefile.conf b/alib2raw/makefile.conf
deleted file mode 100644
index 915aeab509d5d7c859c84e59376ca1de15525315..0000000000000000000000000000000000000000
--- a/alib2raw/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2raw/project.conf b/alib2raw/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..fe8a58059bc37f819147c888560f8e4f74d709ce
--- /dev/null
+++ b/alib2raw/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2raw_cli_integration/makefile.conf b/alib2raw_cli_integration/makefile.conf
deleted file mode 100644
index 4dd6cd66d46a6e38784c067abfe84cefd7b4454b..0000000000000000000000000000000000000000
--- a/alib2raw_cli_integration/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2raw alib2data alib2cli alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2raw_cli_integration/project.conf b/alib2raw_cli_integration/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..7b8bfdaf44b6eeaa410d2f43606e2e161ff21bf4
--- /dev/null
+++ b/alib2raw_cli_integration/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2raw alib2data alib2cli alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2std/makefile.conf b/alib2std/makefile.conf
deleted file mode 100644
index 81fee2807aa1104e4a94b570083599e5e670528a..0000000000000000000000000000000000000000
--- a/alib2std/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=
-SYSTEM_LIBRARIES=
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2std/project.conf b/alib2std/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..7b83f384a63b7394d4da2eb4afc925cfcc619aa5
--- /dev/null
+++ b/alib2std/project.conf
@@ -0,0 +1,2 @@
+[General]
+category: library
diff --git a/alib2str/makefile.conf b/alib2str/makefile.conf
deleted file mode 100644
index 915aeab509d5d7c859c84e59376ca1de15525315..0000000000000000000000000000000000000000
--- a/alib2str/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2str/project.conf b/alib2str/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..fe8a58059bc37f819147c888560f8e4f74d709ce
--- /dev/null
+++ b/alib2str/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2str_cli_integration/makefile.conf b/alib2str_cli_integration/makefile.conf
deleted file mode 100644
index aff2be9a274ed42b85ecb8eeae3888dc44a3e9aa..0000000000000000000000000000000000000000
--- a/alib2str_cli_integration/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2str alib2data alib2cli alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2str_cli_integration/project.conf b/alib2str_cli_integration/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..7542cbdfb3a74ac4bcc8fe746681320f7bac1b1b
--- /dev/null
+++ b/alib2str_cli_integration/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2str alib2data alib2cli alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/alib2xml/makefile.conf b/alib2xml/makefile.conf
deleted file mode 100644
index e35133ecc1345743c5572b7aee046d5ca54397b0..0000000000000000000000000000000000000000
--- a/alib2xml/makefile.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-LINK_LIBRARIES=alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
-TEST_LINK_LIBRARIES=
-TEST_SYSTEM_LIBRARIES=
diff --git a/alib2xml/project.conf b/alib2xml/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..d85a622b68e405bdb9e4b0c1b9694b2d19911285
--- /dev/null
+++ b/alib2xml/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: library
+
+[Dependencies]
+project: alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/all-cmake-template.sh b/all-cmake-template.sh
index 09c06a46169f603b0bf7cd85f5f8cdaa2172957a..afb2754d476fad617a8fe1e9ffbfc884a6edc020 100755
--- a/all-cmake-template.sh
+++ b/all-cmake-template.sh
@@ -13,7 +13,7 @@ function build () {
 	echo "Building '$DIRECTORY' in $2 mode: Build dir is '$BUILD_DIR', threads: $THREADS" 1>&2
 	echo "------------------------------------------------------------------------------" 1>&2
 
-	./CMake/generate.py -wm
+	./CMake/generate.py -wm || exit 1
 
 	if [ ! -d "$BUILD_DIR" ] && [ ! -L "$BUILD_DIR" ]; then
 		mkdir "$BUILD_DIR"
diff --git a/aminimize2/makefile.conf b/aminimize2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aminimize2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aminimize2/project.conf b/aminimize2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aminimize2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/anormalize2/makefile.conf b/anormalize2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/anormalize2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/anormalize2/project.conf b/anormalize2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/anormalize2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/aql2/makefile.conf b/aql2/makefile.conf
deleted file mode 100644
index fb2d1c40d28e6a0a888f298fe082041d78f336fe..0000000000000000000000000000000000000000
--- a/aql2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2elgo alib2graph_algo alib2algo alib2aux alib2raw_cli_integration alib2raw alib2str_cli_integration alib2str alib2graph_data alib2data alib2dummy alib2cli alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2 readline
diff --git a/aql2/project.conf b/aql2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..fe8b512e0a65792b91bf31b4ef071844d2c63c93
--- /dev/null
+++ b/aql2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2elgo alib2graph_algo alib2algo alib2aux alib2raw_cli_integration alib2raw alib2str_cli_integration alib2str alib2graph_data alib2data alib2dummy alib2cli alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2 readline
diff --git a/aquery2/makefile.conf b/aquery2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/aquery2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/aquery2/project.conf b/aquery2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/aquery2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/arand2/makefile.conf b/arand2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/arand2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/arand2/project.conf b/arand2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/arand2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/araw2/makefile.conf b/araw2/makefile.conf
deleted file mode 100644
index 1a2ab573a6c2c8df85affe00991b0be0b2ea065d..0000000000000000000000000000000000000000
--- a/araw2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2raw alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/araw2/project.conf b/araw2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..eb505ea42a04dfad50dc3e180c4f8a3d3bd37d8a
--- /dev/null
+++ b/araw2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2raw alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/arename2/makefile.conf b/arename2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/arename2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/arename2/project.conf b/arename2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/arename2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/areverse2/makefile.conf b/areverse2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/areverse2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/areverse2/project.conf b/areverse2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/areverse2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/arun2/makefile.conf b/arun2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/arun2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/arun2/project.conf b/arun2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/arun2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/astat2/makefile.conf b/astat2/makefile.conf
deleted file mode 100644
index 4c5c53a50ac0c8e62ae7235c46114e6e2703fa5b..0000000000000000000000000000000000000000
--- a/astat2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2str alib2aux alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/astat2/project.conf b/astat2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..ad971c2d77bea6dbbfb7a47351263dbe47e73c7d
--- /dev/null
+++ b/astat2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2str alib2aux alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/astringology2/makefile.conf b/astringology2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/astringology2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/astringology2/project.conf b/astringology2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/astringology2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/atrim2/makefile.conf b/atrim2/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/atrim2/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/atrim2/project.conf b/atrim2/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/atrim2/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2
diff --git a/tniceprint/makefile.conf b/tniceprint/makefile.conf
deleted file mode 100644
index ecd8ef76d4f1444776ded0eef2bb68b69ef00e4f..0000000000000000000000000000000000000000
--- a/tniceprint/makefile.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
-SYSTEM_LIBRARIES=xml2
diff --git a/tniceprint/project.conf b/tniceprint/project.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5559c2c4fbcf265a956cb43d144d0bb3b9debd5b
--- /dev/null
+++ b/tniceprint/project.conf
@@ -0,0 +1,6 @@
+[General]
+category: executable
+
+[Dependencies]
+project: alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+system: xml2