run make in parallel
        Dependency *curr_dep = rule->dependencies;
        int num_dep = 0;

        while (curr_dep != NULL) {
            num_dep++;
            curr_dep = curr_dep->next_dep;
        }

        int child_pid_list[num_dep]; // Create a list to store the pid's of child processes
        int child_count = 0; // Create a variable to hold the number of children

        curr_dep = rule->dependencies; // Re-initialize curr_dep

        // Iterate through the dependencies and fork new processes for each
        while (curr_dep != NULL) {
            int pid = fork(); // Fork a new process

            if (pid > 0) { // If is parent process
                child_pid_list[child_count] = pid; // Add to the list of pids
                child_count++;
            } else if (pid == 0) { // If is child process
                run_make(curr_dep->rule->target, rules, 1); // Update the dependency
                exit(0); // Exit
            } else { // If fork fails
                perror("fork");
                exit(1);
            }

            curr_dep = curr_dep->next_dep;
        }

        int status;

        // Check if all processes exited successfully
        for (int i = 0; i < child_count; i++) {
            waitpid(child_pid_list[i], &status, 0);
            if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { // If non-zero exit status
                exit(1);
            }
        }
        execute = 0; // Update the variable so that the actions are executed
    }