制作文件可执行文件

时间:2015-01-29 05:58:47

标签: c makefile

我尝试使用类似的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

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

1 个答案:

答案 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