这个makefile正在删除.c文件吗?

这个makefile正在删除.c文件吗?,c,makefile,C,Makefile,问题: a) 行是否清除了servidor.c文件 b) 如何修改makefile,使其同时编译client.c程序并创建client.o 整个makefile应该如下所示: all: servidor servidor: servidor.o gcc -lpthread -o servidor.o servidor.o: clean: gcc -c servidor.c rm -rf servidor.o LDLIBS=-lpthread 服务商:服务商.o客户.o

问题:

a)
行是否清除了
servidor.c
文件


b) 如何修改makefile,使其同时编译
client.c
程序并创建
client.o

整个makefile应该如下所示:

all: servidor
servidor: servidor.o
    gcc -lpthread -o servidor.o
servidor.o:
clean:
    gcc -c servidor.c
    rm -rf servidor.o
LDLIBS=-lpthread
服务商:服务商.o客户.o
清洁:
rm-f*.o
a) 清洁:生产线是否消除了污染 servidor.c文件

不,是电话线

LDLIBS=-lpthread
servidor: servidor.o client.o
clean:
<TAB>rm -f *.o
这只是确保
servidor.o
存在以及后续
rm
不会失败的一种蹩脚方法。应该是这样

gcc -c servidor.c
b) 如何修改makefile,使其同时编译client.c程序并创建client.o

最简单的方法是使用内置规则。如果在任何规则的先决条件中添加
client
,或
client.o
,它将从
client.c
自动生成


(如果您需要
client.c
,请将
-lpthread
添加到
LDLIBS

生成文件看起来很奇怪,我不怀疑它是否可以工作?但我认为最好是:

clean:
    -rm -rf servidor.o

如果Makefile真的是这样的话,我认为它根本不会工作。第一个
gcc
调用肯定不能按原样工作。它应该是
gcc-o servidor servidor.o-lpthread
。假设是gmake,而不是AIX make。如果cc不是gcc的符号链接,还需要类似于cc=/usr/bin/gcc的东西。另外,
-l
开关属于LIBS,而不是LDFLAGS。@如果目标文件不存在,jpalacek将
rm-rf
失败?@khachik。这就是领先冲刺的目的。它告诉Make忽略命令的返回值。(顺便说一句,在这种情况下,
-r
切换到
rm
是不必要的(它意味着“递归”,并且只有应用到目录时才有意义),出于偏执,我将省略它。)
    all: client
client: client.o
    gcc -lpthread -o client.o
client.o:
    gcc -c client.c
clean: 
    rm -rf client.o