Makefile对C程序无法正常工作

时间:2017-03-02 17:41:21

标签: 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 -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.

1 个答案:

答案 0 :(得分:1)

cliente.o和servidor.o的目标应使用-c而不是-o,即您希望编译为目标文件。

将头文件指定为目标cliente和servidor中的依赖项也没有意义。这些命令只链接,但不编译文件。

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

使用-ldl编译目标文件时,指定库选项-c等也没有意义。

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