i am using makefiles in c, i have three files and each of the three have all the declarations of each variable. so it looks like this when i compile.
/usr/bin/ld: comp_disc.o:(.bss+0x8): multiple definition of `Cost_of_purchase'; main.o:(.bss+0x8): first defined here
/usr/bin/ld: comp_disc.o:(.bss+0x10): multiple definition of `DiscTot'; main.o:(.bss+0x10): first defined here
/usr/bin/ld: comp_disc.o:(.bss+0x18): multiple definition of `Sales_tax'; main.o:(.bss+0x18): first defined here
/usr/bin/ld: comp_disc.o:(.bss+0x20): multiple definition of `Total_price'; main.o:(.bss+0x20): first defined here
/usr/bin/ld: comp_disc.o:(.bss+0x28): multiple definition of `military'; main.o:(.bss+0x28): first defined here
but when i only keep those declarations on main.c i get this.
comp_disc.c:10:12: error: ‘Cost_of_purchase’ undeclared (first use in this function)
   10 |         if(Cost_of_purchase > 150) {
      |            ^~~~~~~~~~~~~~~~
comp_disc.c:11:13: error: ‘Mdisc’ undeclared (first use in this function)
   11 |             Mdisc = .15 * Cost_of_purchase;
so I'm wondering what i need to do so that my variables are declared correctly using make
here is my makefile
 # target : dependencies
  2 cwork7 : main.o comp_disc.o print_res.o
  3     gcc main.o comp_disc.o print_res.o -Wall -o cwork7
  4
  5 main.o : main.c
  6     gcc -c main.c -Wall
  7
  8 comp_disc : comp_disc.c
  9     gcc -c comp_disc.c -Wall
 10
 11 print_res.o : print_res.c
 12     gcc -c print_res.c -Wall
my main.c
 5 #include <stdio.h>
  6 //functions prototypes
  7 void compute_discount(void);
  8 int print_results(void);
  9
 10
 11 //defined Gloabal var
 12 double Mdisc;
 13 double Cost_of_purchase;
 14 double DiscTot;
 15 double Sales_tax;
 16 double Total_price;
 17 char military;
 18
 19 int main (void) {
 20     //declare variables
 21
 22     //Cost of purchase
 23     printf("Cost of purchase?\t\t$");
 24     scanf ("%lf",&Cost_of_purchase);
 25
 26     //Military?
 27     printf("In military (y or n)?\t\t");
 28     scanf(" %c" ,&military);
 29
 30     //calling for functions
 31     compute_discount();
 32     print_results();
 33
 34 }
 35
 36
my print_res.c
  1 #include <stdio.h>
  2
  3 //function to print results
  4 int print_results(void){
  5
  6     //if input is y Y then use below, this is not dependant on if military only if the letter is accepted
  7     switch(military){
  8     case 'y':
  9     case 'Y':
 10         printf("Military discount (15%%): \t$%.2f\n", Mdisc);
 11         printf("Discounted total: \t\t$%.2f\n", DiscTot);
 12         printf("Sales tax (5%%): \t\t$%.2f\n", Sales_tax);
 13         printf("Total: \t\t\t\t$%.2f\n", Total_price);
 14         break;
 15     //less information is given when n or N is used
 16     case 'n':
 17     case 'N':
 18         printf("Sales tax (5%%): \t\t$%.2f\n", Sales_tax);
 19         printf("Total: \t\t\t\t$%.2f\n", Total_price);
 20         break;
 21 }
 22 return(0);
 23 }
and my comp_disc.c
1 #include <stdio.h>
  2
  3 //function to compute discount
  4 void compute_discount(void){
  5
  6     //compute military discount
  7     switch(military){
  8     case 'y':
  9     case 'Y':
 10         if(Cost_of_purchase > 150) {
 11             Mdisc = .15 * Cost_of_purchase;
 12         } else if (Cost_of_purchase < 150) {
 13             Mdisc = .10 * Cost_of_purchase;
 14         }
 15         break;
 16     case 'n':
 17     case 'N':
 18         Mdisc = 0;
 19         break;
 20     default:
 21         printf("Error: bad input\n");
 22 }
 23
 24     //cost minus military discount
 25     DiscTot = Cost_of_purchase - Mdisc;
 26     //sales tax
 27     Sales_tax = .05 * DiscTot;
 28     //Total Calculated
 29     Total_price = DiscTot + Sales_tax;
 30
 31 }
Please let me know what you think is the issue.
 
     
    