gpt4 book ai didi

C - 使用 gnu 的 Makefile,包含 2 个 .c 文件和 1 个 .h 文件

转载 作者:行者123 更新时间:2023-11-30 15:28:35 26 4
gpt4 key购买 nike

我有两个 .c 文件 - sort.c 和 fileio.c - 主要功能在 sort.c 中。然后我有一个 .h 文件 - fileio.h。当我手动编译所有这些文件时,一切正常。但我的 Makefile 遇到了问题。

我已经为 Makefile 指令行正确设置了选项卡 - 不确定您是否能够通过在此处查看它来判断。这是我到目前为止所拥有的:

CC = gcc
sort : sort.o fileio.o
gcc sort.o fileio.o -o sort
sort.o : sort.c fileio.c
gcc -g sort.c fileio.c -o sort.o
fileio.o : fileio.c fileio.h
gcc -g fileio.c -o fileio.o

但是当我运行这个时,我得到了 Undefined Reference to 'main' 错误...我对此非常困惑,因为事实上,sort.c 中有一个 main() 函数。

谁能告诉我哪里出错了?我花了很长时间阅读教程,它们都比我需要的更复杂,并且没有解决这个错误。

最佳答案

您需要使用 -c 标志构建 .o 对象。否则它们将被编译为可执行文件,这需要入口点 main() 函数。您还应该从 sort.o 目标的编译规则中删除 fileio.c。并且依赖项可能是 sort.h 和/或 fileio.h,但不是 fileio.c。您还可以使用 $@(目标名称),而不是将其显式键入规则中。

CC = gcc

sort : sort.o fileio.o
$(CC) sort.o fileio.o -o $@
sort.o : sort.c fileio.h
$(CC) -g sort.c -c -o $@
fileio.o : fileio.c fileio.h
$(CC) -g fileio.c -c -o $@

请注意,例如,通常使用利用标准变量的规则是有意义的

$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@

并分别使用 CPPFLAGSCFLAGS 作为预处理器和编译器标志。

关于C - 使用 gnu 的 Makefile,包含 2 个 .c 文件和 1 个 .h 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519351/

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