Makefile 不能为 C 程序正常工作
Makefile does not work properly for C program
我用以下结构完成了这个 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
但是当我尝试执行它时,它只适用于第一条规则。然后执行停止。我最后的 objective 是让每条规则都起作用,因为如果我分别执行每条规则它就会起作用:
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
,即你想编译成目标文件。
在目标客户端和服务器中将头文件指定为依赖项也没有意义。这些命令仅 link,但不编译文件。
servidor: servidor.o
$(CC) -o $@ servidor.o -lrt -lpthread
在使用 -c
.
编译为目标文件时,指定库选项 -ldl
等也没有意义
cliente.o: cliente.c array.h
$(CC) -Wall -c cliente.c
我用以下结构完成了这个 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
但是当我尝试执行它时,它只适用于第一条规则。然后执行停止。我最后的 objective 是让每条规则都起作用,因为如果我分别执行每条规则它就会起作用:
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
,即你想编译成目标文件。
在目标客户端和服务器中将头文件指定为依赖项也没有意义。这些命令仅 link,但不编译文件。
servidor: servidor.o
$(CC) -o $@ servidor.o -lrt -lpthread
在使用 -c
.
-ldl
等也没有意义
cliente.o: cliente.c array.h
$(CC) -Wall -c cliente.c