我有两个 .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 $@
并分别使用 CPPFLAGS
和 CFLAGS
作为预处理器和编译器标志。
关于C - 使用 gnu 的 Makefile,包含 2 个 .c 文件和 1 个 .h 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519351/