用C语言制作makefile
实际上,我正试图用C语言制作一个makefile,但似乎在链接所有文件时遇到了一些严重的问题。基本上,我正在尝试制作一个字典,它通过一个带有套接字的服务器运行。我初始化字典并解释文件servidor-dict.c中的请求,然后从dict.c发送请求。我还有这两个文件: o,其中包含使用套接字的基本函数(j_socket(),j_bind()…)。 h,它是libjsocket.o的头 当我运行makefile时,控制台一直告诉我:用C语言制作makefile,c,sockets,dictionary,makefile,C,Sockets,Dictionary,Makefile,实际上,我正试图用C语言制作一个makefile,但似乎在链接所有文件时遇到了一些严重的问题。基本上,我正在尝试制作一个字典,它通过一个带有套接字的服务器运行。我初始化字典并解释文件servidor-dict.c中的请求,然后从dict.c发送请求。我还有这两个文件: o,其中包含使用套接字的基本函数(j_socket(),j_bind()…)。 h,它是libjsocket.o的头 当我运行makefile时,控制台一直告诉我: Undefined symbols for architectu
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
显然,我没有在套接字文件和服务器/客户端文件之间建立正确的链接。
我的makefile如下所示:
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
CFLAGS=-c-Wall
object=servidor-dict.o libjsocket.o
object1=dict.o libjsocket.o
塔里亚:迪克特·塞维多迪克特
servidor dict:$(对象)
gcc-g$(对象)-o服务目录
dict:$(object1)
gcc-g$(对象1)-o指令
%.o:%.c
gcc$(CFLAGS)$<
servidor-dict.c:jsocket.h
dict.c:jsocket.h
libjsocket.c:jsocket.h
清洁:
rm-rf*.o塔雷亚酒店
我在这里看到了多个问题
应该是libsocket.o
libjsocket.o
应该依赖于某种东西(libjsocket.o
?)libjsocket.c
- 规则
应该是servidor-dict.o:
servidor-dict
<> LI>真正的规则<代码> ServordRo.Dist.O./C> >(您应该考虑使用一个神奇的规则来处理所有.O文件的生成)
更改生成文件后不要忘记清理。您不需要定义
%.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 dict
和dict
是您的最终节目:
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
警告:确定是制表符在缩进
例如,实际上可以使用
gcc-MM*.c
自动生成一组三行代码 你确定你的makefile上写的是libsocket.o:
而不是libjsocket.o:
(在上面的第14行)?如果它说的是libsocket.o
,那么它可能在其他地方找到了libjsocket.o
,内容不同。确实存在错误。可能是我在测试其他东西时犯的错误。但它仍然不能解决我的问题。。。但谢谢你让我注意到这一点;)自动变量将帮助您避免这样的错误。我只是按照您的建议实现我的代码。奇怪的是,dict构建得很好,但不是servidor-dict。我检查了好几次名称,并尝试使用自动变量,但效果不好。谢谢!你给我的Makefile的第二个代码非常好用!我想我现在明白我的错误了。再次感谢您抽出时间!