Gcc Makefile对于C程序不能正常工作
我使用以下结构完成了此Makefile: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
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
类似于您为服务商和客户提供的目标。