我尝试使用类似的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函数中创建中间和最大文件取决于用户是否想要使用它们而在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
我的其余代码工作正常,但是当我尝试运行可执行文件时,它就像这些代码行一样,甚至不在这里。
答案 0 :(得分:3)
仅在链接步骤上定义宏是不够的。它们是预处理程序指令。所以你应该在 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