def build(args):
    """Build the documentation for the projects specified in the CLI.
    It will do 4 different things for each project the
    user asks for (see flags):
        1. Update mkdocs's index.md file with links to project
           documentations
        2. Build these documentations
        3. Update the documentations' index.html file to add a link
           back to the home of all documentations
        4. Build mkdoc's home documentation

    Args:
        args (ArgumentParser): parsed args from an ArgumentParser
    """
    # Proceed?
    go = False

    # Current working directory
    dir_path = Path().resolve()

    # Set of all available projects in the dir
    # Projects must contain a PROJECT_MARKER file.
    all_projects = {
        m
        for m in os.listdir(dir_path)
        if os.path.isdir(m) and "source" in os.listdir(dir_path / m)
    }

    if args.all and args.projects:
        print(
            "{}Can't use both the 'projects' and 'all' flags{}".format(
                utils.colors.FAIL, utils.colors.ENDC
            )
        )
        return

    if not args.all and not args.projects:
        print(
            "{}You have to specify at least one project (or all){}".format(
                utils.colors.FAIL, utils.colors.ENDC
            )
        )
        return

    if args.force:
        go = True
        projects = (
            all_projects if args.all else all_projects.intersection(set(args.projects))
        )

    elif args.projects:
        s = "You are about to build the docs for: "
        s += "\n- {}\nContinue? (y/n) ".format("\n- ".join(args.projects))
        if "y" in input(s):
            go = True
            projects = all_projects.intersection(set(args.projects))
    elif args.all:
        s = "You're about to build the docs for ALL projects."
        s += "\nContinue? (y/n) "
        if "y" in input(s):
            go = True
            projects = all_projects

    if go:
        # Update projects links
        listed_projects = utils.get_listed_projects()

        # Don't update projects which are not listed in the Documentation's
        # Home if the -o flag was used
        if args.only_index:
            projects = listed_projects.intersection(projects)
        print("projects", projects)
        for project_to_build in projects:
            # Re-build documentation
            warnings.warn("[sphinx]")
            if args.verbose:
                os.system(
                    "cd {} && make clean && make html".format(
                        dir_path / project_to_build
                    )
                )
            else:
                os.system(
                    "cd {} && make clean && make html > /dev/null".format(
                        dir_path / project_to_build
                    )
                )

            # Add link to Documentation's Home
            utils.overwrite_view_source(project_to_build, dir_path)

            if args.verbose:
                print("\n>>>>>> Done {}\n\n\n".format(project_to_build))
        # Build Documentation
        if args.verbose:
            os.system("mkdocs build")
            print("\n\n>>>>>> Build Complete.")
        else:
            warnings.warn("[mkdocs]")
            os.system("mkdocs build > /dev/null")

        if args.offline:
            utils.make_offline()