gpt4 book ai didi

c - 在 C 中制作一个 makefile

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:22 25 4
gpt4 key购买 nike

我实际上正在尝试用 C 语言制作一个 makefile,但似乎我在将所有文件链接在一起时遇到了一些严重的问题。基本上,我正在尝试制作一本通过带套接字的服务器运行的字典。我初始化字典并解释文件 servidor-dict.c 中的请求,然后从 dict.c 发送请求。我也有这两个文件:libjsocket.o 包含使用套接字的基本功能(j_socket()、j_bind()...)。jsocket.h 是 libjsocket.o 的头文件。

当我运行我的 makefile 时,控制台一直在提示我:

Undefined symbols for architecture x86_64:
"_j_socket", referenced from:
_main in servidor-dict.o
"_j_bind", referenced from:
_main in servidor-dict.o
"_j_accept", referenced from:
_main in servidor-dict.o

显然我没有在套接字文件和我的服务器/客户端文件之间建立正确的链接。我的生成文件如下:

CFLAGS= -c -Wall
object= servidor-dict.o libjsocket.o
object1 = dict.o libjsocket.o

tarea: dict servidor-dict

servidor-dict: $(object)
gcc -g $(object) -o servidor-dict

dict: $(object1)
gcc -g $(object1) -o dict

%.o: %.c
gcc $(CFLAGS) $<

servidor-dict.c: jsocket.h
dict.c: jsocket.h
libjsocket.c: jsocket.h

clean :
rm -rf *.o tarea

最佳答案

您不需要定义 %.o : %.c 规则,make 应该已经知道如何使用 CFLAGS .将 -c 放在 CFLAGS 中可能会破坏它在其他地方的使用。此外,.c 文件不依赖于 .h 文件,所以也许:

如果 tarea 是结合所有其他 .o 文件的最终程序:

CFLAGS = -Wall

tarea: servidor-dict.o dict.o libjsocket.o
$(CC) -o $@ $^

servidor-dict.o : servidor-dict.c jsocket.h
dict.o : dict.c jsocket.h
libjsocket.o : libjsocket.c jsocket.h

clean :
rm -rf *.o tarea

如果 servidor-dictdict 应该是您的最终程序:

CFLAGS = -Wall

all : dict servidor-dict
servidor-dict : servidor-dict.o libjsocket.o
$(CC) -o $@ $^
dict : dict.o libjsocket.o
$(CC) -o $@ $^

servidor-dict.o : servidor-dict.c jsocket.h
dict.o : dict.c jsocket.h
libjsocket.o : libjsocket.c jsocket.h

clean :
rm -rf *.o dict servidor-dict

警告:确定缩进的是 TAB 字符。

例如,实际上可以使用 gcc -MM *.c 自动生成三行组。

关于c - 在 C 中制作一个 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com