0

I'm trying to define specific lines of code to be run using a makefile like so

all: my_prog

my_prog: main.o count.o median.o maximum.o 
    gcc main.o count.o median.o maximum.i -o my_prog
main.o: main.c count.h median.h maximum.h
    gcc count.c -c
median: median.c median.h
    gcc -g -DMEDIAN median.c count.o main.o -o median
maximum: maximum.c maximum.h
    gcc -g -DMAXIMUM maximum.c count.o main.o -o maximum
clean:
    rm -f *.o my_prog median maximum

I'm trying to make the median and maximum files in my main function dependent on whether the user wants to use them or not and in my main.c the functions are defined

#ifdef MAXIMUM
long max = maximum(arr, size);

printf("The maximum is %Ld. \n", max);
#endif


#ifdef MEDIAN
long med = median(arr, size);

printf("The median is %Ld. \n", med);
#endif

The rest of my code works fine but when I try to run the executables it acts like these lines of code aren't even here.

whale21
  • 51
  • 6

1 Answers1

3

Defining the macros only on link steps is not enough. They are preprocessor directives. So you should define them in compile step.

You may use gcc -DMEDIAN -o filename_median.o -c filename.c to generate an object file dedicated for median and another one for maximum.

So in your case the Makefile would look like:

all: my_prog median maximum

my_prog: main.o count.o median.o maximum.o 
    gcc main.o count.o median.o maximum.i -o my_prog
main.o: main.c count.h median.h maximum.h
    gcc -o main.o main.c -c
main_median.o: main.c count.h median.h maximum.h
    gcc -DMEDIAN -o main_median.o main.c -c
main_maximum.o: main.c count.h median.h maximum.h
    gcc -DMAXIMUM -o main_maximum.o main.c -c
median: median.c median.h main_median.o
    gcc -g -DMEDIAN median.c count.o main_median.o -o median
maximum: maximum.c maximum.h main_maximum.o
    gcc -g -DMAXIMUM maximum.c count.o main_maximum.o -o maximum
clean:
    rm -f *.o my_prog median maximum
timrau
  • 22,578
  • 4
  • 51
  • 64