Gcc Makefile对于C程序不能正常工作

Gcc Makefile对于C程序不能正常工作,gcc,makefile,compiler-errors,shared-libraries,Gcc,Makefile,Compiler Errors,Shared Libraries,我使用以下结构完成了此Makefile: BIN_FILES = array cliente servidor CC = gcc CCGLAGS = -Wall -g all: CFLAGS=$(CCGLAGS) all: $(BIN_FILES) .PHONY : all array.o: array.c array.h $(CC) -c -Wall -fPIC array.c cliente.o: cliente.c array.h $(CC) -Wall

我使用以下结构完成了此Makefile:

BIN_FILES = array cliente servidor

CC = gcc


CCGLAGS =   -Wall -g


all: CFLAGS=$(CCGLAGS)
 all: $(BIN_FILES)
.PHONY : all

array.o: array.c array.h
    $(CC) -c -Wall -fPIC array.c

cliente.o: cliente.c array.h
    $(CC) -Wall -c cliente.c

cliente: cliente.o array.h
    $(CC) -Wall -o cliente -ldl -lrt

servidor.o: servidor.c mensajes.h
    $(CC) -Wall -c servidor.c -lrt -lpthread

servidor: servidor.o
    $(CC) -o $@ servidor -lrt -lpthread

clean:
    rm -f $(BIN_FILES) *.o

.SUFFIXES:
.PHONY : clean
但当我尝试执行它时,它只适用于第一条规则。然后执行停止。我的最终目标是使每个规则都能工作,因为如果我单独执行每个规则,它就会工作:

gcc -c -Wall -fPIC array.c
gcc -fPIC -shared -o libarray.so array.o -lrt
gcc -Wall -o cliente cliente.c -ldl -lrt
gcc -Wall -o servidor servidor.c -lrt -lpthread
谢谢

编辑:
现在,我在应用@Jens修改时遇到以下错误:

make: *** No rule to make the objective 'array', necesary for 'all'. Stop.

cliente.o和servidor.o的目标应该使用
-c
而不是
-o
,也就是说,您希望编译成目标文件

将头文件指定为目标客户机和服务商中的依赖项也没有意义。这些命令只链接,不编译文件

servidor: servidor.o
    $(CC) -o $@ servidor.o -lrt -lpthread
当使用
-c
编译到目标文件时,指定库选项
-ldl
等也没有意义

cliente.o: cliente.c array.h
    $(CC) -Wall -c cliente.c

开始修复语法错误。编辑错误,对不起,我想我不理解最后两个更正。你能举个例子说明你的建议吗?@giorgioW Examples补充道。顺便说一下,您可以使用更小的make文件,使用make的内置规则来完成。你正在重新发明轮子。是的,我知道这不是生成文件的最佳方式,但我从这个领域开始,所以首先我创建元素生成文件,现在我在应用你的修改时遇到以下错误:
make:**没有规则来生成目标“数组”,这是“所有”所必需的。停止。
@giorgioW这是因为没有目标
array:array.o
类似于您为服务商和客户提供的目标。