当我运行下面的代码时,它会给我一条错误消息:
cc1:警告:main.c:不是目录[默认启用] frequent.o:文件无法识别:无法识别文件格式 collect2:错误:ld返回1退出状态 make: * [main]错误1
CC = gcc
CPPFLAGS = -I
main: main.c headers.h sortt.o frequent.o
#$(CC) $(CPPFLAGS) -c $^ -o $@
sortt.o: headers.h sortt.c
$(CC) $(CPPFLAGS) -c $< -o $@
frequent.o: headers.h frequent_word.c search_similar_word.o
$(CC) $(CPPFLAGS) -c $< -o $@
答案 0 :(得分:0)
您的规则中存在很多错误。为什么frequent.o
列出search_similar_word.o
作为先决条件?您没有理由不能在frequent.o
之前或同时构建search_similar_word.o
。
此外,您在编译行中使用$<
扩展到第一个先决条件,但frequent.o
的第一个先决条件是headers.h
,因此您正在尝试编译{{ 1}}这是错误的:你想编译headers.h
。
同样为frequent_word.c
。
使用与源文件不同的名称命名目标文件也很奇怪。
在你的sortt.o
中列出CPPFLAGS
标志但你没有给出任何参数:该标志以目录作为参数。
最后,当您尝试链接最终对象时,您正在使用-I
标志(我假设注释字符-c
只是调试工件);这是不正确的,因为#
标志告诉编译器生成目标文件,并且不链接最终对象。
你的makefile应该是这样的:
-c
我不知道如何使用CC = gcc
CPPFLAGS = -I .
main: main.c headers.h sortt.o frequent.o
$(CC) $(CPPFLAGS) $^ -o $@
sortt.o: sortt.c headers.h
$(CC) $(CPPFLAGS) -c $< -o $@
frequent.o: frequent_word.c headers.h
$(CC) $(CPPFLAGS) -c $< -o $@
,因为它似乎没有在您的构建中的任何位置使用。