![](/img/trans.png)
[英]make: *** No rule to make target `gcc', needed by `Employee.o'. Stop
[英]how to fix error 'no rule to make target %.o, needed by all. stop'
当我输入 make 并回车时,它会说:
no rule to make target %.o, needed by all. stop'.
这是我的 makefile:
CC=g++
LDFLAGS=""
all: %.o %.h
$(CC) $< $(LDFLAGS) -o bin
%.o: %.cpp %.h
$(CC) -c $<
这些是我的目录的内容:
$ ls
main.cpp makefile
我是 GNU make 的新手,刚刚学会使用自动变量。 有人可以帮我吗?
% 用于替换模式,这是您在为单个模块定义规则时想要的(就像您所做的那样),但不是您想要的“全部”依赖项列表。 A % 将扩展为单个值。
相反,您需要一个实际的通配符(如 shell 扩展)来匹配所有 *.o 文件。 因此,将您的目标定义更改为
all: *.o *.h
与您的问题无关,但这是不对的:
LDFLAGS=""
make 不解析引号,因此您已将变量LDFLAGS
设置为文字字符串""
(两个双引号)。 当你在你的食谱中使用它时:
$(CC) $< $(LDFLAGS) -o bin
就好像您输入了:
g++ ... "" -o bin
这是一个语法错误(您将一个空参数传递给g++
。如果您想要一个空变量,您只需编写:
LDFLAGS =
现在,你的问题。 这不是模式规则:
all: %.o %.h
模式规则的目标(冒号左侧)中必须有模式。 由于这是一个明确的规则,先决条件(冒号的右侧)是文字字符串%.o
和%.h
。 Make 不知道如何构建一个名为%.o
的文件,因此它失败了。
目前还不清楚你期望这条规则做什么,所以我不能说更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.