繁体   English   中英

如何修复错误'没有规则来制作目标 %.o,所有人都需要。 停止'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM