How do you get rid of the issue with curr_rule pointing to the next rule?
Rule *parse_file(FILE *fp) {
    // Look through file 
    char a_line[MAXLINE];
    // Initalize rules 
    Rule *head_rule = malloc(sizeof(Rule));
    Rule *curr_rule = malloc(sizeof(Rule));
    while (fgets(a_line, MAXLINE, fp) != NULL) {
        // Filter out comments and blank lines
        char *token;
        token = strtok(a_line, "\r");
        if (is_comment_or_empty(token) == 0) {
            // Each token represents a line in the makefile! 
            while(token != NULL) {
                // We are on target line and not on an empty line 
                if (token[0] != '\t' && token[0] != '\n') {
                    // printf("%s\n", token);

                    // Get target
                    char *sub_token;
                    sub_token = strtok(token, " "); // It gets words before " "
                    if (strcmp(token, ":") != 0) { // We will grab just the names of the targets in the Makefile
                        // printf("%s", sub_token);
                        curr_rule->target = malloc(sizeof(char) * (strlen(sub_token) + 1)); // + 1 for \0
                        strncpy(curr_rule->target, sub_token, strlen(sub_token));
                    }
                }
                // Go to the next rule (should move this to action like or have like anothe condition 
                // after checking for target line and action line to check if you have an empty space or something
                // inside of the while loop of course)
                
                if (head_rule == NULL) { // This means we are looking at the first rule
                    head_rule = curr_rule;
                    free(curr_rule);
                    curr_rule = curr_rule->next_rule;
                }
                else {
                    curr_rule = curr_rule->next_rule;
                }
                token = strtok(NULL, " "); // Go to the next line a.k.a token!
            }
        }
    }