make文件代码的问题

时间:2013-12-20 13:46:38

标签: makefile

当我运行下面的代码时,它会给我一条错误消息:

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 $@

1 个答案:

答案 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 $@ ,因为它似乎没有在您的构建中的任何位置使用。