我是编写makefile的初学者。我有一个像这样的makefile:
PATH1 = /ref
CC=gcc
LINK = gcc
INCLUDES = .
INCLUDES += -I/PATH1/inc \
-I/$(PATH1)/abc/inc/ \
-I/$(PATH1)/def/inc/
all: src_file
run: src_file
src_file:
$(CC) $(INCLUDES) -MM /ref/abcd.c -o $@
clean:
rm -f *.o src_file
如果我做了一个make,我会收到错误:
linker input file unused because linking not done.
我在stackoverflow中读了一些类似的帖子,但无法得到解决方案。有人可以让我知道我的makefile有什么问题吗?提前谢谢。
答案 0 :(得分:3)
罪魁祸首是预处理器选项-MM
。来自gcc pre-processor options,
-M
不输出预处理结果,而是输出适合描述主源文件依赖关系的规则。 预处理器输出一个包含目标文件名的make规则 对于该源文件,冒号和所有包含的名称 文件,包括来自-include或-imacros命令行的文件 选项。
将-M传递给驱动程序意味着-E,并使用隐式-w来抑制警告。
<强> -MM 强>
与-M类似,但不提及在系统头目录中找到的头文件,也不提及直接或包含的头文件 间接地,来自这样的标题。
如此有效地你只是预处理,因此没有编译和没有链接以及由此产生的错误。