使文件可执行

Make file executables

我正在尝试使用像这样的 makefile

将特定代码行定义为 运行
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

我正在尝试根据用户是否要使用它们在我的主要功能中制作中值和最大文件,并且在我的 main.c 中定义了功能

#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

我的其余代码工作正常,但是当我尝试 运行 可执行文件时,它的行为就像这些代码行根本不在这里。

仅在 link 步定义宏是不够的。它们是预处理器指令。所以你应该在 compile 步骤中定义它们。

您可以使用 gcc -DMEDIAN -o filename_median.o -c filename.c 生成专用于 median 的目标文件和另一个专用于 maximum 的目标文件。

所以在你的情况下,Makefile 看起来像:

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