gpt4 book ai didi

c - Makefile 编译多个文件

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:40 26 4
gpt4 key购买 nike

我正在尝试通过 Make 编译我的 TCP 客户端服务器程序,但我无法将所有内容链接在一起。

我当前使用的文件:

 client.c
connectioninfo.c
connectioninfo.h
server.c
splinter.c
splinter.h

所有 .c 文件都在其代码中使用了两个 .h 文件。

这是我的 makefile 的样子:

 splinter : server.o client.o splint.o connectioninfo.o
server.o: server.c splinter.h connectioninfo.h
gcc -o server server.c
client.o: client.c splinter.h connectioninfo.h
gcc -o client client.c
splint.o: splinter.c splinter.h connectioninfo.h
gcc -o splint splinter.c
connectioninfo.o: connectioninfo.c splinter.h connectioninfo.h
gcc -o connectioninfo connectioninfo.c

我得到错误:

  gcc -o server server.c
/tmp/ccAu7sDE.o: In function `main':
server.c:(.text+0x6e): undefined reference to `alloc_serverinfo'
server.c:(.text+0x87): undefined reference to `getconnectioninfo'
server.c:(.text+0xcd): undefined reference to `port'
server.c:(.text+0xdc): undefined reference to `host'
server.c:(.text+0xe7): undefined reference to `s_bind'
server.c:(.text+0x1a5): undefined reference to `s_accept'
collect2: error: ld returned 1 exit status
Makefile:4: recipe for target 'server.o' failed
make: *** [server.o] Error 1

关于如何编译所有内容的任何想法?谢谢

最佳答案

您当前正在调用 gcc 来为每个源文件构建应用程序,而不是目标文件。请使用选项 -c 并为输出提供适当的文件名,例如

gcc -c -o server.o server.c

现在更改应用程序的规则以使其链接:

splinter : server.o client.o splint.o connectioninfo.o
gcc -o splinter server.o client.o splint.o connectioninfo.o

要调试您的 Makefile 并查看在不执行它们的情况下将生成哪些命令,您可以使用

make -n

您可以在 shell 中显式调用命令,例如 gcc -c -o server.o server.c 来检查每个步骤。

哦,你可以将目标文件命名为 splinter.o,它是从源文件 splinter.c 编译而来的。生成的可执行文件 splinter 不会有问题。

现在您还可以简化您的 Makefile 以使用自动变量;请参阅documentation for make .

全部放在一起,您可以使用:

splinter : server.o client.o splinter.o connectioninfo.o
gcc -o $@ $^

server.o: server.c splinter.h connectioninfo.h

client.o: client.c splinter.h connectioninfo.h

splinter.o: splinter.c splinter.h connectioninfo.h

connectioninfo.o: connectioninfo.c splinter.h connectioninfo.h

%.o: %.c
gcc -o $@ $<

关于c - Makefile 编译多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57033924/

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