create a linkedlist for makefile
Rule *parse_file(FILE *fp) {
    Rule *rules = NULL;
    Rule *current_rule = NULL;
    char line[256];     
    while (fgets(line, sizeof(line), fp)) {
        if (is_comment_or_empty(line) == 1 && line[0] != '\n') {
            continue;  // Skip comments and empty lines
        }
        // Remove the newline character at the end of the line
        line[strcspn(line, "\n")] = '\0';
        if (line[0] == '\t') {
            // This is an action line
            Action *action = malloc(sizeof(Action));
            char *token = strtok(line, " ");
            int argc = 0;
            while (token != NULL) {
                strcpy(action->args[argc], token);
                argc++;
                token = strtok(NULL, " ");
            }
            action->args[argc] = NULL;
            action->next_act = current_rule->actions;
            current_rule->actions = action;
        }
        else {
            // This is a rule line
            char *target = strtok(line, " ");
            Dependency *deps = NULL;
            char *dep = strtok(NULL, " ");
            while (dep != NULL) {
                Dependency *new_dep = malloc(sizeof(Dependency));
                new_dep->rule = NULL;
                new_dep->next_dep = deps;
                deps = new_dep;
                dep = strtok(NULL, " ");
            }
            Rule *rule = malloc(sizeof(Rule));
            strcpy(rule->target, target);
            rule->dependencies = deps;
            rule->actions = NULL;
            rule->next_rule = rules;
            rules = rule;
            current_rule = rule;
        }
    }
    return rules;
}