2

我是编写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

如果我进行制作,我会收到错误消息:

linker input file unused because linking not done.

我在 stackoverflow 中阅读了一些类似的帖子,但找不到解决方案。有人可以让我知道我的makefile有什么问题吗?提前致谢。

4

1 回答 1

3

罪魁祸首是预处理器选项-MM。从gcc 预处理器选项

-M

不是输出预处理的结果,而是输出一个适合make描述主源文件依赖关系的规则。预处理器输出一个 make 规则,其中包含该源文件的目标文件名、冒号和所有包含文件的名称,包括来自 -include 或 -imacros 命令行选项的文件。

将 -M 传递给驱动程序意味着 -E,并使用隐式 -w 抑制警告。

-毫米

与 -M 类似,但不提及在系统头目录中找到的头文件,也不提及此类头文件中直接或间接包含的头文件。

所以有效地你只是预处理,因此没有编译,没有链接以及由此产生的错误。

于 2012-05-07T18:11:12.550 回答